Files
crm.clientright.ru/modules/Workflow2/js/frontend.js
Fedor ac7467f0b4 Major CRM updates: AI Assistant, Court Status API, S3 integration improvements, and extensive file storage system
- Added comprehensive AI Assistant system (aiassist/ directory):
  * Vector search and embedding capabilities
  * Typebot proxy integration
  * Elastic search functionality
  * Message classification and chat history
  * MCP proxy for external integrations

- Implemented Court Status API (GetCourtStatus.php):
  * Real-time court document status checking
  * Integration with external court systems
  * Comprehensive error handling and logging

- Enhanced S3 integration:
  * Improved file backup system with metadata
  * Batch processing capabilities
  * Enhanced error logging and recovery
  * Copy operations with URL fixing

- Added Telegram contact creation API
- Improved error logging across all modules
- Enhanced callback system for AI responses
- Extensive backup file storage with timestamps
- Updated documentation and README files

- File storage improvements:
  * Thousands of backup files with proper metadata
  * Fix operations for broken file references
  * Project-specific backup and recovery systems
  * Comprehensive file integrity checking

Total: 26,461+ files added/modified including AWS SDK, vendor dependencies, and extensive backup system.
2025-10-16 11:17:21 +03:00

3851 lines
205 KiB
JavaScript

(function () {
/** DetailView **/
"use strict";
jQuery('.listViewActionsDiv .addButton[onclick*="runListViewWorkflow"]').each(function(index, ele) {
var html = jQuery('strong', this).html();
jQuery(this).html('<strong>' + html + '</strong>');
var onclick = jQuery(this).attr('onclick');
if(onclick.indexOf('//#') != -1) {
var parts = onclick.split('//');
parts[1] = parts[1].replace(';','');
jQuery(this).css('backgroundColor', parts[1]);
}
});
//hh
var WorkflowRecordMessages = [];
function startWorkflowById(workflow, crmid, async) {
if(typeof async == "undefined") {
async = true;
}
if(async != true) {
async = false;
}
if(typeof crmid == "undefined") {
crmid = "0";
}
if(typeof workflow == "undefined") {
return false;
}
var html = "<div id='workflow_executer' style='width:150px;height:150px;background-image:url(modules/Workflow2/icons/modal_white.png);border:1px solid #777777; box-shadow:0 0 2px #ccc; position:absolute;top:100px;right:300px;text-align:center;'><br><br><img src='modules/Workflow2/icons/sending.gif'><br><br><strong>Executing Workflow ...</strong></div>";
jQuery("body").append(html);
jQuery.ajax("index.php", {
async: async,
cache: false,
data:{
"module" : "Workflow2",
"action" : "Workflow2Ajax",
"file" : "ajaxExecuteWorkflow",
"crmid" : crmid,
"workflow" : workflow
},
type: 'POST',
dataType: 'json'
}).always(function( response ) {
jQuery("#workflow_executer").remove();
if(response.result == "startfields") {
var html = "<div style='position:absolute;background-color:#fff;border:3px solid #5890c9;box-shadow:0px 0px 5px #777;border-radius:3px;top:-100px;left:0px;width:200px;padding:5px;'><form method='POST' onsubmit='submitStartfields(" + '"' + response.workflow + '","' + crmid + '","' + module + '"' + ");return false;' id='wf_startfields'>";
html += "<img src='modules/Workflow2/icons/cross-button.png' style='position:absolute;right:-6px;top:-6px;cursor:pointer;' onclick='jQuery(\"#startfieldsContainer\").fadeOut(\"fast\");'>";
html += "<div class='small'>These Workflow requests some values.</div>";
jQuery.each(response.fields, function(index, value) {
var inputField = "";
var fieldName = '' + value.name + '';
switch(value.type) {
case "TEXT":
inputField = '<input type="text" style="width:180px;" name="' + fieldName + '" value="' + value.default + '">';
break;
case "CHECKBOX":
if(value.default === null) {
value.default = "off";
}
inputField = '<input type="checkbox" name="' + fieldName + '" ' + (value["default"].toLowerCase()=="on"?"checked='checked'":"") + ' value="on">';
break;
case "SELECT":
var splitValues = value["default"].split("\n");
inputField = '<select style="width:183px;" name="' + fieldName + '">';
jQuery.each(splitValues, function(index, value) {
var fieldValue = value;
var fieldKey = value;
if(value.indexOf("#~#") != -1) {
var parts = value.split("#~#");
fieldValue = parts[0];
fieldKey = parts[1];
}
inputField += "<option value='" + fieldKey + "'>" + fieldValue + "</option>";
});
inputField += '</select>';
break;
case "DATE":
inputField = '<input style="width:130px;" type="text" name="' + fieldName + '" id="'+fieldName+'" value="' + value["default"] + '">';
inputField += '<img src="modules/Workflow2/icons/calenderButton.png" style="margin-bottom:-8px;cursor:pointer;" id="jscal_trigger_' + fieldName + '">';
inputField += '<script type="text/javascript">Calendar.setup ({inputField : "' + fieldName + '", ifFormat : "%Y-%m-%d", button:"jscal_trigger_' + fieldName + '",showsTime : false, singleClick : true, step : 1});</script>';
break;
}
html += "<label><div style='overflow:hidden;min-height:26px;padding:2px 0;'><div style='" + (value.type=="CHECKBOX"?"float:left;":"") + "'><strong>"+ value.label + "</strong></div><div style='text-align:right;'>" + inputField + "</div></div></label>";
});
html += "<input type='submit' name='submitStartField' value='Execute Workflow' class='button small edit'>";
html += "</form></div>";
jQuery("#startfieldsContainer").hide();
jQuery("#startfieldsContainer").html(html);
jQuery("#startfieldsContainer").fadeIn("fast");
}
});
}
function reloadWFDWidget() {
var widgetContainer = jQuery('div.widgetContainer#' + jQuery("#module").val() + '_sideBar_Workflows');
var key = widgetContainer.attr('id');
FlexUtils('Workflow2').cacheSet(key, 0);
widgetContainer.html('');
// Vtiger_Index_Js.loadWidgets(widgetContainer);
}
window.continueWorkflow = function (execid, crmid, block_id) {
var Execution = new WorkflowExecution();
Execution.setContinue(execid, block_id);
Execution.execute();
}
window.stopWorkflow = function(execid, crmid, taskid, direct) {
if(typeof direct == 'undefined' || direct != true) {
if(!confirm("stop Workflow?"))
return;
}
jQuery.post("index.php?module=Workflow2&action=QueueStop", {
"crmid" : crmid,
"execID" : execid,
"taskID" : taskid
},
function(response) {
reloadWFDWidget();
}
);
return false;
}
/** ListView **/
function executeWorkflow(button, module, selection) {
var selectedIDs = "";
if(typeof selection == "undefined") {
selectedIDs = jQuery('#allselectedboxes').val().split(";");
selectedIDs = selectedIDs.join(";");
} else {
selectedIDs = selection.join(";");
}
if (jQuery("#Wf2ListViewPOPUP").length == 0)
{
var div = document.createElement('div');
div.setAttribute('id','Wf2ListViewPOPUP');
div.setAttribute('style','display:none;width:350px; position:absolute;');
div.innerHTML = 'Loading';
document.body.appendChild(div);
// for IE7 compatiblity we can not use setAttribute('style', <val>) as well as setAttribute('class', <val>)
newdiv = document.getElementById('Wf2ListViewPOPUP');
newdiv.style.display = 'none';
newdiv.style.width = '400px';
newdiv.style.position = 'absolute';
}
jQuery('#status').show();
currentListViewPopUpContent = "#wf2popup_wf_execute";
jQuery.post("index.php", {
"module" : "Workflow2",
"action" : "Workflow2Ajax",
"file" : "ListViewPopup",
"return_module" : module,
"record_ids" : selectedIDs
}, function(response) {
jQuery("#Wf2ListViewPOPUP").html(response);
fnvshobj(button,'Wf2ListViewPOPUP');
var EMAILListview = document.getElementById('Wf2ListViewPOPUP');
var EMAILListviewHandle = document.getElementById('Workflow2ViewDivHandle');
Drag.init(EMAILListviewHandle,EMAILListview);
jQuery('#status').hide();
});
}
var currentListViewPopUpContent = "#wf2popup_wf_execute";
function showWf2PopupContent(id) {
jQuery(currentListViewPopUpContent + "_TAB").addClass("deactiveWf2Tab");
jQuery(id + "_TAB").removeClass("deactiveWf2Tab");
jQuery(currentListViewPopUpContent).hide();
jQuery(id).show();
currentListViewPopUpContent= id;
if(id == "wf2popup_wf_importer") {
jQuery("#execute_mode").val("execute");
} else {
jQuery("#execute_mode").val("import");
}
}
function executeLVWorkflow() {
if(jQuery("#execute_mode").val() == "import") {
return true;
}
var record_ids = jQuery("#WFLV_record_ids").val();
var return_module = jQuery("#WFLV_return_module").val();
var workflow = jQuery("#exec_this_workflow").val();
var parallel = jQuery("#exec_workflow_parallel").attr("checked")=="checked"?1:0;
var ids = record_ids.split("#~#");
jQuery("#executionProgress_Value").html("0 / " + ids.length);
jQuery("#executionProgress").show();
jQuery.ajaxSetup({async:false});
var counter = 0;
jQuery.each(ids, function(index, value) {
jQuery.post("index.php?module=Workflow2&action=Workflow2Ajax&file=ajaxExecuteWorkflow", {
"crmid" : value,
"return_module" : return_module,
"workflow" : workflow,
"allow_parallel" : parallel
}
);
counter = counter + 1;
jQuery("#executionProgress_Value").html(counter + " / " + ids.length);
});
jQuery.ajaxSetup({async:true});
jQuery("#executionProgress_Value").html("100%");
if(currentListViewPopUpContent == "#wf2popup_wf_execute") {
return false;
}
}
var ENABLEredirectionOrReloadAfterFinish = true;
var WorkflowMetaData = {};
var WithinRecordLessWF = false;
function runListViewWorkflow(workflowId, couldStartWithoutRecord, collection_process) {
if(typeof couldStartWithoutRecord === 'undefined' && typeof collection_process === 'undefined') {
if(typeof WorkflowMetaData[workflowId] === 'undefined') {
FlexAjax('Workflow2').postAction('WorkflowInfo', {workflow_id: workflowId}, 'json').then(function (workflowInfo) {
WorkflowMetaData[workflowId] = workflowInfo;
runListViewWorkflow(workflowId);
});
return false;
} else {
couldStartWithoutRecord = WorkflowMetaData[workflowId].withoutrecord;
collection_process = WorkflowMetaData[workflowId].collection_process;
}
}
if(WithinRecordLessWF === true) {
couldStartWithoutRecord = false;
}
if(typeof couldStartWithoutRecord === 'undefined') {
couldStartWithoutRecord = false;
}
if(typeof collection_process === 'undefined') {
collection_process = false;
}
var processSettings = {};
if(typeof WorkflowDesignerProcessSettings == 'undefined' || typeof WorkflowDesignerProcessSettings[workflowId] == 'undefined') {
processSettings = {'withoutrecord': couldStartWithoutRecord, 'collection_process' : collection_process};
} else {
processSettings = WorkflowDesignerProcessSettings[workflowId];
}
var listInstance = window.app.controller();
var params = listInstance.getListSelectAllParams(false);
if(params !== false) {
var selectedIds = params.selected_ids;
} else {
var selectedIds = [0];
}
RedooUtils('Workflow2').blockUI({
title: 'Executing ... ',
message: '<p style="margin:20px 0px;font-size:14px;"><strong style="text-transform:uppercase;">' + FLEXLANG('Please wait', 'Workflow2') + ' ...&nbsp;&nbsp;&nbsp;&nbsp;</strong><span id="workflowDesignerDone">0</span> of <span id="workflowDesignerTotal">' + (selectedIds!='all'?selectedIds.length:'?') + '</span> done</p><div style="margin: 10px 10px 10px 10px;" id="executionProgress" class="progress"><div class="progress-bar progress-bar-success progress-bar-striped" style="width: 0;"></div></div>',
theme: false,
css: {
'backgroundColor':'#2d3e49',
'color': '#ffffff',
'border': '1px solid #fff'
},
onBlock: function() {
var counter = -1;
if(selectedIds == 'all') {
jQuery.ajaxSetup({async:false});
var parameter = listInstance.getDefaultParams();
parameter.module = 'Workflow2';
parameter.view = undefined;
parameter.action = 'GetSelectedIds';
jQuery.post('index.php', parameter, function(response) {
selectedIds = response.ids;
}, 'json');
jQuery('#workflowDesignerTotal').html(selectedIds.length);
jQuery.ajaxSetup({async:true});
}
var totalIds = selectedIds.length;
if(selectedIds.length > 1) {
ENABLEredirectionOrReloadAfterFinish = false;
}
var couldStartWithoutRecord = false;
if(selectedIds.length == 0 && processSettings.withoutrecord == false) {
alert('Please choose a record to execute');
RedooUtils('Workflow2').unblockUI();
return;
}
/*
if(selectedIds.length == 0) {
couldStartWithoutRecord = true;
}
*/
if(processSettings.collection_process == "1") {
var workflow = new Workflow();
ENABLEredirectionOrReloadAfterFinish = true;
workflow.setRequestedData({ 'recordids':selectedIds.join(',') }, 'collection_recordids');
var crmid = selectedIds.shift();
workflow.execute(workflowId, crmid, function(response) {
RedooUtils('Workflow2').unblockUI();
if(typeof response.redirection == "undefined") {
window.location.reload();
}
return true;
});
return;
}
if(processSettings.withoutrecord == "1" && selectedIds.length == 1 && selectedIds[0] == 0) {
var workflow = new Workflow();
ENABLEredirectionOrReloadAfterFinish = true;
var crmid = 0;
WithinRecordLessWF = true;
workflow.execute(workflowId, crmid, function(response) {
RedooUtils('Workflow2').unblockUI();
if(typeof response.redirection == "undefined") {
window.location.reload();
}
return true;
}, true);
return;
}
function _executeCallback() {
counter = counter + 1;
jQuery('#workflowDesignerDone').html(counter);
var crmid = selectedIds.shift();
if(couldStartWithoutRecord === true) {
crmid = 0;
couldStartWithoutRecord = false;
}
var progress = Math.round(((totalIds - selectedIds.length) / totalIds) * 100);
jQuery('#executionProgress .progress-bar-success').css('width', progress + '%');
if(typeof crmid !== 'undefined') {
var workflow = new Workflow();
workflow.setBackgroundMode(true);
workflow.execute(workflowId, crmid, _executeCallback);
} else {
RedooUtils('Workflow2').unblockUI();
window.location.reload();
}
}
_executeCallback();
}
});
}
function runListViewSidebarWorkflow() {
runListViewWorkflow(jQuery("#workflow2_workflowid").val(), jQuery("#workflow2_workflowid option:selected").data('withoutrecord') == '1');
}
function runSidebarWorkflow(crmid) {
if(jQuery("#workflow2_workflowid").val() == "") {
return;
}
var workflow = new Workflow();
workflow.execute(jQuery("#workflow2_workflowid").val(), crmid);
}
function WorkflowWidgetLoaded() {
jQuery('.WFdivider', '#WorkflowDesignerWidgetContainer').each(function(index, element) {
if(jQuery(element).next().length == 0 || jQuery(element).next().hasClass('WFdivider')) {
jQuery(element).hide();
}
});
}
var WFDvisibleMessages = {};
var WorkflowHandler = {
startImport : function(moduleName) {
RedooAjax('Workflow2').postView('ImportModal', {target_module:moduleName}).then(function(response) {
RedooUtils('Workflow2').hideModalBox();
RedooUtils('Workflow2').showContentOverlay(response).then(function() {
RedooUtils('Workflow2').loadScript('modules/Workflow2/js/Importer.js').then(function() {
var Import = new Importer();
Import.init();
});
});
});
/*
jQuery.post('index.php?module=Workflow2&view=ImportStep1', { source_module: source_module, currentUrl: window.location.href }, function(html) {
app.showModalWindow(html, function(data) {
jQuery('#modalSubmitButton').removeAttr('disabled');
});
});
*/
}
};
window.WorkflowHandler = WorkflowHandler;
function showEntityData(crmid) {
jQuery.post('index.php?module=Workflow2&view=EntityData', { crmid:crmid }, function(html) {
app.showModalWindow(html, function(data) {
jQuery('.EntityDataDelete').on('click', function(e) {
var dataid = jQuery(e.currentTarget).data('id');
jQuery.post('index.php', {
'module':'Workflow2',
'action':'EntityDataDelete',
'dataid':dataid
}, function() {
showEntityData(crmid);
});
});
});
});
}
var workflowObj;
window.closeForceNotification = function(messageId) {
jQuery.post('index.php?module=Workflow2&action=MessageClose', { messageId:messageId, force: 1 });
}
var UserQueue = {
run: function(exec_id, block_id) {
var Execution = new WorkflowExecution();
Execution.setContinue(exec_id, block_id);
Execution.execute();
}
};
var WorkflowPermissions = {
returnCounter:0,
submit: function(execID, confID, hash, result) {
if(jQuery('#row_' + confID).data('already') == '1') {
if(!confirm('Permission already set. Set again?')) {
return;
}
}
var execution = new WorkflowExecution();
execution.setCallback(function(response) { });
execution.setContinue(execID, 0);
//execution.enableRedirection(false);
execution.submitRequestFields('authPermission', [{name:'permission', value: result}, {name:'confid', value: confID}, {name:'hash', value: hash}], {}, jQuery('.confirmation_container'));
var row = jQuery('#row_' + confID);
jQuery('.btn.decision', row).removeClass('pressed').addClass('unpressed');
jQuery('.btn.decision_' + result, row).addClass('pressed').removeClass('unpressed');
return false;
},
submitAll:function(blockId, result) {
/*if(jQuery('table.block' + blockId + ' [data-already="1"]').length > 0) {
if(!confirm('This will overwrite every already defined value! Continue?')) {
return;
}
}*/
jQuery('table.block' + blockId + ' .permissionRow input.selectRows:checked').each(function(index, value) {
var row = jQuery(this).closest('.permissionRow');
var confId = jQuery(row).data('id');
var execID = jQuery(row).data('execid');
var hash = jQuery(row).data('hash');
WorkflowPermissions.returnCounter++;
var execution = new WorkflowExecution();
execution.setCallback(function(response) { WorkflowPermissions.returnCounter--; if(WorkflowPermissions.returnCounter == 0) window.location.reload(); });
execution.setContinue(execID, 0);
execution.enableRedirection(false);
execution.submitRequestFields('authPermission', [{name:'permission', value: result}, {name:'confid', value: confId}, {name:'hash', value: hash}], {}, jQuery('.confirmation_container'));
});
return false;
}
};
window.WorkflowPermissions = WorkflowPermissions;
var WorkflowFrontendTypes = {
getWorkflows:function(type, module, crmid) {
if(typeof type === 'undefined') {
console.error('You do not define a FrontendType. Please check!');
return;
}
if(typeof module === 'undefined') {
console.error('You do not define a Module of FrontendTypes. Please check!');
return;
}
if(typeof crmid === 'undefined' && typeof WFDFrontendConfig !== 'undefined' && typeof WFDFrontendConfig[type] !== 'undefined' && typeof WFDFrontendConfig[type][module] !== 'undefined') {
var aDeferred = jQuery.Deferred();
var result = [];
jQuery.each(WFDFrontendConfig[type][module], function(index, value) {
var tmp = value.config;
tmp.workflow_id = value.workflowid;
tmp.module = module;
tmp.label = value.label;
tmp.color = value.color;
tmp.textcolor = value.textcolor;
result.push(tmp);
});
aDeferred.resolveWith({}, [result]);
return aDeferred.promise();
}
return FlexAjax('Workflow2').postAction('FrontendLinks', {
'type' : type,
'target_module' : module,
'target_crmid' : crmid
}, 'json');
},
triggerWorkflow:function(type, workflowid, crmid, envVars) {
var dfd = jQuery.Deferred();
var execution = new WorkflowExecution();
execution.setCallback(function(response) {
var workflowFrontendActions = new Workflow();
workflowFrontendActions.checkFrontendActions('init', crmid);
dfd.resolve(response);
return false;
});
execution.init(crmid);
execution.setWorkflowById(workflowid);
if(typeof envVars === 'undefined') {
var envVars = {};
}
execution.setFrontendType(type);
execution.setEnvironment(envVars);
execution.execute();
return dfd.promise();
},
trigggerWorkflow:function(type, workflowid, crmid, envVars) {
return WorkflowFrontendTypes.triggerWorkflow(type, workflowid, crmid, envVars);
}
};
window.WorkflowFrontendTypes = WorkflowFrontendTypes;
;(function ($) {
"use strict";
var ScopeName = 'Workflow2';
var Version = '2.4.1';
/**
* FlexUtils V2.4.1
* 2.4.1 - 23.05.2019
* - Fix bug related to modals, when first one is closed
* 2.4.0 - 25.07.2018
* - add createFileDrop function
* - add FlexForm component
* 2.3.1 - 18.07.2018
* - Fixed setFieldValue for picklists in VT7
* 2.3.0 - 12.07.2018
* - JSHint recommendations applied
* 2.2.1 - 21.05.2018
* - add onQuickCreate from VT6
* 2.2.0 - 26.04.2018
* - add FlexTranslate component
* 2.1.3 - 02.03.2018
* - improve compatibility with old RedooUtils
* 2.1.2 - 23.02.2018
* - add close callback to showModalBox
* 2.1.1 - 09.02.2018
* - add initial local cache handler
* 2.1.0 - 20.12.2017
* - Rename to FlexUtils
* - Add function showRecordInOverlay
* 2.0.13 - 18.11.2017
* - Implement Exception Output in postAction / postView
* 2.0.12 - 16.11.2017
* - add showModalBox replacement if already box is shown
* 2.0.11 - 08.11.2017
* - add convertComponents parameter to refreshContent to convert select2
* 2.0.10 - 04.11.2017
* - add showNotification
* - add Init console log
* 2.0.09 - 31.10.2017
* - add getCurrentDateFormat function
* 2.0.08 - 22.09.2017
* - add getContentMaxWidth / getContentMaxHeight functions
* 2.0.07 - 13.08.2017
* - add getMainRecordId function
* - add getCurrentCustomViewId
* - add onListChange
* 2.0.06 - 13.06.2017
* - getListFields fixed for VT6
* 2.0.05 - 12.06.2017
* - first version build with TypeScript
* - fix getFieldElement on SummaryView
* - Fix issues reported from TypeScript
* 2.0.04 - 11.16.2017
* - improve showModalBox Function
* - add hideModalBox Function
* - add FlexAjax.postSettingsView as wrapper for default function
* - add FlexAjax.postSettingsAction as wrapper for default function
* - add FlexUtils.refreshContent
* 2.0.03 - add getCurrentLayout Function
* - add layoutDependValue Function
* - add BlockUI
* 2.0.02 - add getQueryParams Function
* - Extend getMainModule by Query Params
* - Introduce RedooUtils Action on Server
* - add setFieldValue Function
* 2.0.01 - VT7 Compatibility
* - add FlexUtils.onFieldChange method
* - add FlexUtils.onRelatedListChange method
* - add FlexUtils.isVT7 method
* - add FlexUtils.Signal Implementation
* - add global RedooEvents
* 1.0.11 - Make postAction / postView settings flag optional
* Add wrong Ajax Response error output
* 1.0.10 - Add getRecordLabels function
* 1.0.9 - Add fillFieldSelect, loadStyles functions
* 1.0.8 - Add returnInput Parameter to getFieldElement function
* 1.0.7 - Add FlexUtils.loadScript
*//*globals confirm:false */
/**
* You must generate a FlexAjax Environment by useing FlexAjax(ScopeName)
* @example
* FlexAjax("ScopeName")
* @global
* @toc
* @namespace
**/
var FlexAjax = {
/**
* This function sends a POST request to a given Action.<br/>
* Module is get from ScopeName
*
* @example
* FlexAjax("ScopeName").postAction(
* "ActionName",
* {
* "param1": value1,
* "param2": value2
* },
* true,
* "json"
* ).then(function(responseJson) {
* // ... do something with JSON response
* });
* @param {string} actionName - Action to call
* @param {array} [params] - parameters to send
* @param {boolean|string} [settings] - (boolean) Is action within CRM Settings?<br/> (string) DataType
* @param {string} [dataType] - Datatype of response
* @returns {string|json}
*/
postAction: function (actionName, params, settings, dataType) {
if (typeof params == 'undefined') {
params = {};
}
params.module = ScopeName;
params.action = actionName;
if (typeof dataType == 'undefined' && typeof settings == 'string') {
dataType = settings;
settings = false;
}
if (typeof settings != 'undefined' && settings == true) {
params.parent = 'Settings';
}
return FlexAjax.post('index.php', params, dataType);
},
/**
* This function send a POST request to a given Action.
* Module is get from ScopeName
*
* @example
* FlexAjax("ScopeName").postAction(
* "ActionName",
* {
* "param1": value1,
* "param2": value2
* },
* true,
* "json"
* ).then(function(responseJson) {
* // ... do something with JSON response
* });
* @param viewName
* @param params
* @param dataType
* @returns {*}
*/
postSettingsView: function (viewName, params, dataType) {
return FlexAjax.postView(viewName, params, true, dataType);
},
/**
*
* @param actionName
* @param params
* @param dataType
* @returns {*}
*/
postSettingsAction: function (actionName, params, dataType) {
return FlexAjax.postAction(actionName, params, true, dataType);
},
/**
*
* @param viewName
* @param params
* @param settings
* @param dataType
* @returns {*}
*/
postView: function (viewName, params, settings, dataType) {
if (typeof params == 'undefined') {
params = {};
}
params.module = ScopeName;
params.view = viewName;
if (typeof dataType == 'undefined' && typeof settings == 'string') {
dataType = settings;
settings = false;
}
if (typeof settings != 'undefined' && settings == true) {
params.parent = 'Settings';
}
return FlexAjax.post('index.php', params, dataType);
},
/**
*
* @param url URL to call
* @param params Object with POST parameters
* @param dataType Single value of datatype if not set in params
* @returns {*}
*/
post: function (url, params, dataType) {
var aDeferred = jQuery.Deferred();
if (typeof url == 'object') {
params = url;
url = 'index.php';
}
if (typeof params == 'undefined') {
params = {};
}
if (typeof dataType == 'undefined' && typeof params.dataType != 'undefined') {
dataType = params.dataType;
}
var options = {
url: url,
data: params
};
if (typeof dataType != 'undefined') {
options.dataType = dataType;
}
//options.dataType = undefined;
options.dataType = 'text';
options.type = 'POST';
jQuery.ajax(options)
.always(function (data) {
if (typeof dataType != 'undefined' && dataType == 'json') {
try {
data = jQuery.parseJSON(data);
}
catch (e) {
FlexUtils.unblockUI();
console.error('FlexAjax Error - Should: JSON Response:');
console.log('Request: ', options);
console.log(data);
var height = 10;
jQuery('.RedooAjaxError').each(function (index, ele) {
height += jQuery(ele).height() + 30;
});
var id = 'error_' + (Math.floor(Math.random() * 1000000));
var content = data.substr(0, 500).replace(/</g, '&lt;').replace(/\\(.?)/g, function (s, n1) {
switch (n1) {
case '\\':
return '\\';
case '0':
return '\u0000';
case '':
return '';
default:
return n1;
}
});
if (data.length > 500) {
content += ' .....<em>shortened</em>....... ' + data.substr(-500).replace(/</g, '&lt;').replace(/\\(.?)/g, function (s, n1) {
switch (n1) {
case '\\':
return '\\';
case '0':
return '\u0000';
case '':
return '';
default:
return n1;
}
});
}
var html = '<div class="RedooAjaxError" style="word-wrap:break-word;position:fixed;bottom:' + height + 'px;box-sizing:border-box;left:10px;padding:10px;width:25%;background-color:#ffffff;z-index:90000;border:2px solid #C9331E;background-color:#D29D96;" id="' + id + '"><i class="icon-ban-circle" style="margin-top:2px;margin-right:5px;"></i><span style="color:#C9331E;font-weight:bold;">ERROR:</span> ' + e + '<br/><span style="color:#C9331E;font-weight:bold;">Response:</span>' + content + '</div>';
jQuery('body').append(html);
jQuery('#' + id).on('click', function () {
jQuery(this).fadeOut('fast', function () {
jQuery(this).remove();
});
});
/*
window.setTimeout(function() {
jQuery('#' + id).hide(function() {
jQuery(this).remove();
})
});
*/
//app.showModalWindow(response);
return;
}
}
if (typeof data.success != 'undefined') {
if (data.success == false && (data.error.code.indexOf('request') != -1)) {
if (confirm('Request Error. Reload of Page is required.')) {
window.location.reload();
}
FlexUtils.showNotification(data.error.message, false);
return;
}
}
aDeferred.resolve(data);
//callback(data)
});
return aDeferred.promise();
},
/**
*
* @param url
* @param params
* @param dataType
*/
get: function (url, params, dataType) {
console.error('Vtiger do not support GET Requests');
return;
},
/**
* Drop In Replacement for AppConnector.request
*
* @param params object
* @returns {*}
*/
request: function (params) {
return FlexAjax.post('index.php', params);
}
};/**
* You must generate a FlexCache Environment by useing FlexCache(ScopeName)
* @example
* FlexCache("ScopeName")
* @global
* @namespace
**/
var FlexCache = {
get: function (key, defaultValue) {
if (typeof _FlexCache[key] != 'undefined') {
return _FlexCache[key];
}
return defaultValue;
},
set: function (key, value) {
_FlexCache[key] = value;
}
};
/**
* You must generate a FlexForm Environment by useing FlexForm(ScopeName)
* @example
* FlexForm("ScopeName")
* @global
* @namespace
**/
var FlexForm = {
/**
*
* @param params
* @returns {FlexFormObj}
*/
getInstance:function(params) {
var FlexFormObj = function(parameters) {
this.parameters = parameters;
this.fields = [];
this.events = $({});
this.on = function(event, callbackFunction) {
this.events.on(event, callbackFunction);
};
this.addField = function(label, name, type, value, options) {
var field = new FlexFormField(name, type, label);
if(typeof options !== 'undefined') {
field.setOptions(options);
}
if(typeof value !== 'undefined') {
field.setValue(value);
}
var row = [];
row.push(field);
this.fields.push(row);
};
this.initCSS = function() {
var html = '<style type="text/css">' +
'.FlexFormContainer .materialstyle{border:1px solid transparent}' +
'.FlexFormContainer .materialstyle.group{position:relative;margin-bottom:15px;margin-top:10px}' +
'.FlexFormContainer .materialstyle.prefix-icon .fa{position:absolute;top:8px;font-size:14px}' +
'.FlexFormContainer .materialstyle.prefix-icon label{left:19px}' +
'.FlexFormContainer .materialstyle.prefix-icon input{padding-left:20px}' +
'.FlexFormContainer .materialstyle input{font-size:14px;padding:10px 10px 10px 0;display:block;width:100%;border:none;height:30px;border-bottom:1px solid #757575;border-top:none!important;border-left:none!important;border-right:none!important;box-shadow:none!important}' +
'.FlexFormContainer .materialstyle input[type=file]{border-bottom:none!important}' +
'.FlexFormContainer .materialstyle select{font-size:14px;padding:5px 10px 5px 0;display:block;width:100%;border:none;height:38px;border-bottom:1px solid #757575}' +
'.FlexFormContainer .materialstyle textarea{font-size:14px;padding:3px 5px;display:block;width:100%;height:150px;border:1px solid #757575}' +
'.FlexFormContainer .materialstyle .select2-container{width:100%}' +
'.FlexFormContainer .materialstyle .select2-container .select2-choice,.materialstyle .select2-container .select2-choices,.materialstyle .select2-container .select2-choices .select2-search-field input{-webkit-box-shadow:none;box-shadow:none}' +
'.FlexFormContainer .materialstyle input:focus,.materialstyle select:focus,.materialstyle textarea:focus{outline:0}' +
'.FlexFormContainer .materialstyle label{color:#bbb;font-size:16px;font-weight:400;position:absolute;pointer-events:none;left:5px;top:5px;transition:.2s ease all;-moz-transition:.2s ease all;-webkit-transition:.2s ease all}' +
'.FlexFormContainer .materialstyle input.fixedUsed~label,.materialstyle input.used~label,.materialstyle input:focus~label,.materialstyle select.fixedUsed~label,.materialstyle select.used~label,.materialstyle select:focus~label,.materialstyle textarea.fixedUsed~label,.materialstyle textarea.used~label,.materialstyle textarea:focus~label,.materialstyle.fixedUsed>label{top:-18px;left:0;font-size:12px;color:#5264AE}' +
'.FlexFormContainer .materialstyle .bar{position:relative;display:block;width:100%}' +
'.FlexFormContainer .materialstyle .bar:after,.materialstyle .bar:before{content:\'\';height:2px;width:0;bottom:1px;position:absolute;background:#5264AE;transition:.2s ease all;-moz-transition:.2s ease all;-webkit-transition:.2s ease all}' +
'.FlexFormContainer .materialstyle .bar:before{left:50%}' +
'.FlexFormContainer .materialstyle .bar:after{right:50%}' +
'.FlexFormContainer .ReqValRow .materialstyle { padding:5px 0; }' +
'.FlexFormContainer .materialstyle input:focus~.bar:after,.materialstyle input:focus~.bar:before{width:50%}' +
'</style>';
var checksumFkt = function(s) {
var hash = 0,
i, char;
if (s.length == 0) {
return hash;
}
var l = s.length;
for (i = 0; i < l; i++) {
char = s.charCodeAt(i);
hash = ((hash << 5) - hash) + char;
hash |= 0; // Convert to 32bit integer
}
return hash;
};
var checksum = checksumFkt(html);
var className = 'flexformmodalcss' + checksum;
if($('style.' + className).length === 0) {
var htmlele = $(html).addClass(className);
$('head').append(htmlele);
}
};
this.renderModal = function(widthPx, headline, successText, cancelText) {
this.initCSS();
if(typeof widthPx === 'undefined') {
widthPx = 600;
}
if(typeof headline === 'undefined') {
headline = '';
}
if(typeof successText === 'undefined') {
successText = 'Save';
}
if(typeof cancelText === 'undefined') {
cancelText = 'Cancel';
}
var html = '';
html += '<div class="modal-dialog modelContainer" style="width:' + widthPx + 'px;">';
html += '<div class="modal-content" style="width:100%;">';
// Header
html += '<div class="modal-header"><div class="clearfix"><div class="pull-right"><button type="button" class="close" aria-label="Close" data-dismiss="modal"><span aria-hidden="true" class="fa fa-close"></span></button></div><h4 class="pull-left">' + headline + '</h4></div></div>';
html += '<div class="modal-body FlexFormContainer">';
jQuery.each(this.fields, function(index, fields) {
html += '<div class="ReqValRow">';
jQuery.each(fields, function(fieldIndex, field) {
html += field.render();
});
html += '</div>';
});
html += '</div>';
// Footer
html += '<div class="modal-footer "><center><button class="btn btn-success" type="submit" name="saveButton"><strong>' + successText + '</strong></button><a href="#" class="cancelLink" type="reset" data-dismiss="modal">' + cancelText + '</a></center></div>';
html += '</div>';
html += '</div>';
FlexUtils.showModalBox(html).then($.proxy(function(window, data) {
jQuery.each(this.fields, function(index, fields) {
jQuery.each(fields, function(fieldIndex, field) {
field.init();
});
});
$('.btn-success', window).on('click', $.proxy(function() {
var data = {};
jQuery.each(this.fields, function(index, fields) {
jQuery.each(fields, function(fieldIndex, field) {
data[field.getFieldName()] = field.getValue();
});
});
this.events.trigger('save', data);
}, this));
jQuery('.materialstyle input, .materialstyle select, .materialstyle textarea', window).on('blur', function() {
// check if the input has any value (if we've typed into it)
if (jQuery(this).val()) {
jQuery(this).addClass('used');
} else {
jQuery(this).removeClass('used');
}
}).trigger('blur');
jQuery('.materialstyle .select2-container, .materialstyle input[type="file"]', window).each(function (index, ele) {
// console.log(ele, jQuery(ele).closest('.materialstyle'));
jQuery(ele).closest('.materialstyle').addClass('fixedUsed');
});
}, this));
};
};
var FlexFormField = function(field_name, field_type, field_label) {
var defaultOptions = {
'selfdecorate': false
};
this.field_options = defaultOptions;
this.field_value = null;
this.field_type = field_type;
this.field_name = field_name;
this.field_label = field_label;
this.rendered = false;
this.containerId = 'cfid' + Math.round(Math.random(999999) * 100000) + Math.round(Math.random(999999) * 100000);
this.fieldclass = 'cf' + Math.round(Math.random() * 100000) + Math.round(Math.random() * 100000);
this.typedata = FlexForm.getType(field_type);
this.setOptions = function(options) {
this.field_options = $.extend(true, defaultOptions, options);
};
this.getOptions = function() {
return this.field_options;
};
this.setValue = function(value) {
this.field_value = value;
if(this.rendered === true) {
this.typedata.setter(this.field_value, this);
}
};
this.init = function() {
if(typeof this.typedata.init === 'function') {
this.typedata.init(this);
}
};
this.getValue = function() {
return this.typedata.getter(this);
};
this.getFieldName = function() {
return this.field_name;
};
this.render = function() {
var html = '<div class="group materialstyle" id="' + this.containerId + '">';
html += this.typedata.render(this);
html += '<label>' + this.field_label+ '</label>';
html += '</div>';
this.rendered = true;
return html;
};
this.getContainer = function() {
return $('#' + this.containerId);
};
};
return new FlexFormObj(params);
},
registerType:function(type, renderFunction, initFunction, validateFunction, getterFunction, setterFunction, options) {
FlexForm._types[type] = {
'init': initFunction,
'render': renderFunction,
'validate': validateFunction,
'setter': getterFunction,
'getter': setterFunction,
'options': options
};
},
getType:function(type) {
if(typeof FlexForm._types[type] === 'undefined') {
throw "[" + ScopeName +"] FlexForm: " + type + " is undefined";
}
return FlexForm._types[type];
},
_types:{
'text' : {
'options': {
},
'render': function(fieldInstance) {
return '<input type="text" class="inputEle input-fullwidth ' + fieldInstance.fieldclass + '" value="' + (fieldInstance.field_value !== null ? fieldInstance.field_value : '') + '" />';
},
'validate': function(value, fieldInstance) {
return true;
},
'getter': function(fieldInstance) {
return fieldInstance.getContainer().find('.' + fieldInstance.fieldclass).val();
},
'setter': function(value, fieldInstance) {
fieldInstance.getContainer().find('.' + fieldInstance.fieldclass).val(value);
}
},
'textarea' : {
'options': {
// 'selfdecorate': false,
},
'render': function(fieldInstance) {
return '<textarea class="inputEle input-fullwidth ' + fieldInstance.fieldclass + '">' + (fieldInstance.field_value !== null ? fieldInstance.field_value : '') + '</textarea>';
},
'validate': function(value, fieldInstance) {
return true;
},
'getter': function(fieldInstance) {
return fieldInstance.getContainer().find('.' + fieldInstance.fieldclass).val();
},
'setter': function(value, fieldInstance) {
fieldInstance.getContainer().find('.' + fieldInstance.fieldclass).val(value);
}
},
'picklist' : {
'options': {
// 'selfdecorate': false,
},
'render': function(fieldInstance) {
var options = fieldInstance.getOptions();
var html = '<select class="select2 ' + fieldInstance.fieldclass + '">';
$.each(options.options, function(key, value) {
html += '<option value="' + key + '" ' + (fieldInstance.field_value == key ? 'selected="selected"' : '') + '>' + value + '</option>';
});
html += '</select>';
return html;
},
'init': function(fieldInstance) {
},
'validate': function(value, fieldInstance) {
return true;
},
'getter': function(fieldInstance) {
return fieldInstance.getContainer().find('.' + fieldInstance.fieldclass).select2('val');
},
'setter': function(value, fieldInstance) {
fieldInstance.getContainer().find('.' + fieldInstance.fieldclass).select2('val', value);
}
},
}
};/**
* You must generate a FlexTranslate Environment by useing FlexTranslate(ScopeName)
* @example
* FlexTranslate("ScopeName")
* @global
* @namespace
**/
var FlexTranslate = {
init:function(language, translations) {
FlexCache.set('__translations_' + language, translations);
},
getTranslator:function() {
return function(string) {
return FlexTranslate.__(string);
};
},
__:function(string) {
var language = app.getUserLanguage();
var translations = FlexCache.get('__translations_' + language, {});
if(typeof translations === 'function') {
FlexTranslate.init(language, translations());
return FlexTranslate.__(string);
}
if(typeof translations[string] !== 'undefined') {
return translations[string];
}
return string;
}
};
/*globals Vtiger_Edit_Js:false,Vtiger_Detail_Js:false,Vtiger_Popup_Js:false */
/**
* You must generate a FlexUtils Environment by useing FlexUtils(ScopeName)
* @example
* FlexUtils("ScopeName")
* @global
* @namespace
**/
var FlexUtils = {
layout: null,
currentLVRow: null,
listViewFields: false,
isVT7: function () {
return typeof app.helper !== 'undefined';
},
createFileDrop: function(options) {
if(typeof options === 'undefined') {
options = {};
}
if(typeof options.hovertext === 'undefined') {
options.hovertext = 'Drop File';
}
if(typeof options.container === 'undefined') {
options.container = 'body';
}
if(typeof options.container === 'undefined') {
options.container = 'body';
}
if(typeof options.data === 'undefined') {
options.data = {};
}
if($(options.container).prop('tagName') !== 'BODY' && $(options.container).css('position') == 'static') {
$(options.container).css('position', 'relative');
}
$(options.container).addClass('RegisteredFileDrop');
var containerHeight = $(options.container).height();
if(typeof options.url === 'undefined') {
if(typeof options.action === 'undefined') {
throw 'URL or action is mandatory for FileDrop Component';
} else {
options.url = 'index.php?module=' + ScopeName + '&action=' + options.action;
if(typeof options.settings !== 'undefined' && options.settings === true) {
options.url += '&parent=Settings';
}
}
}
if($('style#FlexFileDropStyles').length === 0) {
var fontSize = 20;
var showIcon = true;
var positionText = '40%';
if(containerHeight < 200) {
fontSize = 12;
showIcon = false;
positionText = '10%';
}
var html = '<style type="text/css" id="FlexFileDropStyles">div.FlexFileDropOverlay {\n' +
' position: absolute;\n' +
' top: 0;\n' +
' left: 0;\n' +
' height: 100%;\n' +
' width: 100%;\n' +
' z-index: 2000;\n' +
' background-color: rgba(0, 0, 0, 0.7);\n' +
' color: #ffffff;\n' +
' font-weight: bold;\n' +
' letter-spacing: 1px;\n' +
' text-transform: uppercase;\n' +
' font-size: ' + fontSize + 'px;\n' +
' overflow:hidden; ' +
' text-align: center;\n' +
' font-family: "Arial Black", Gadget, sans-serif;\n' +
'}\n' +
'div.FlexFileDropOverlay * {\n' +
' pointer-events: none;\n' +
'}\n' +
'div.FlexFileDropOverlay span#uploadHint {\n' +
' position: relative;\n' +
' top: '+positionText+';\n' +
'}\n' +
'div.FlexFileDropOverlay span#uploadHint i {\n' +
(showIcon == false? 'display:none;' : '') +
' font-size: 64px;\n' +
' margin-bottom: 30px;\n' +
'}</style>';
$('head').append(html);
}
if($('.FlexFileDropOverlay', options.container).length === 0) {
var html = '<div class="FlexFileDropOverlay" style="display:none;"><span id="uploadHint"><i class="fa fa-upload" aria-hidden="true"></i><br>' + options.hovertext + '</span></div>';
$(options.container).append(html);
}
var Overlay = $('.FlexFileDropOverlay', options.container);
$(options.container).on('dragenter', $.proxy(function (e) {
e.stopPropagation();
e.preventDefault();
}, this));
$(options.container).on('dragover', $.proxy(function (e) {
e.stopPropagation();
e.preventDefault();
}, this));
$(options.container).on('drop', $.proxy(function (e) {
e.stopPropagation();
e.preventDefault();
}, this));
var aSignal = new FlexUtils.Signal();
$(options.container).append('<input type="file" style="display:none;" class="fileselector" />');
$(options.container).find('.fileselector').on('change', function(e) {
var target = $(e.currentTarget);
if(target.prop('files').length > 0) {
uploadFile(target.prop('files')[0]);
}
});
$(options.container).find('.fileselector').on('click', function(e) {
e.stopPropagation();
});
$(options.container).on('click', function() {
$(options.container).find('.fileselector').trigger('click');
});
var DragContainer = $(options.container);
DragContainer.on('dragenter', function (e) {
Overlay.fadeIn('fast');
} );
Overlay.on('dragleave', function (e) {
Overlay.fadeOut('fast');
});
function uploadFile(file) {
var fd = new FormData();
fd.append('file', file);
var uploadURL = options.url;
var extraData = options.data;
$.each(options.data, function(key, value) {
fd.append(key, value);
});
var jqXHR = jQuery.ajax({
url: uploadURL,
type: "POST",
contentType:false,
processData: false,
cache: false,
data: fd,
success: function(data){
aSignal.dispatch(data);
}
});
}
Overlay.on('drop', function (e) {
e.preventDefault();
e.stopPropagation();
Overlay.fadeOut('fast');
var fileList = e.originalEvent.dataTransfer.files;
$.each(fileList, jQuery.proxy(function(index, file) {
uploadFile(file);
}, this));
});
return aSignal;
},
showRecordInOverlay:function(setype, crmid) {
window.open('index.php?module=' + setype + '&view=Detail&record=' + crmid);
},
showNotification:function(message, isSuccess, options) {
if(typeof isSuccess == 'undefined') {
isSuccess = true;
}
if(typeof options == 'undefined') {
options = {};
}
if(FlexUtils.isVT7()) {
options.message = message;
if(isSuccess === true) {
app.helper.showSuccessNotification(options);
} else {
app.helper.showErrorNotification(options);
}
}
},
cacheSet:function(key, value) {
if(FlexUtils.isVT7()) {
return app.storage.set(key, value);
}
},
cacheGet:function(key, defaultValue) {
if(FlexUtils.isVT7()) {
return app.storage.get(key, defaultValue);
}
},
cacheClear:function(key) {
if(FlexUtils.isVT7()) {
return app.storage.clear(key);
}
},
cacheFlush:function() {
if(FlexUtils.isVT7()) {
return app.storage.flush();
}
},
getCurrentDateFormat:function(type) {
type = type.toLowerCase();
if(FlexCache.get('__CurrentDateFormat_' + type, false) !== false) {
return FlexCache.get('__CurrentDateFormat_' + type, false);
}
var replacement = {};
switch(type) {
case 'php':
replacement = {
'yyyy' : '%Y',
'yy' : '%y',
'dd' : '%d',
'mm' : '%m'
};
break;
case 'moment':
replacement = {
'yyyy' : 'YYYY',
'yy' : 'YY',
'dd' : 'DD',
'mm' : 'MM'
};
break;
}
var currentFormat;
if(FlexUtils.isVT7()) {
currentFormat = app.getDateFormat();
}
$.each(replacement, function(oldPart, newPart) {
currentFormat = currentFormat.replace(oldPart, newPart);
});
FlexCache.set('__CurrentDateFormat_' + type, currentFormat);
return currentFormat;
},
getCurrentCustomViewId: function() {
if(FlexUtils.isVT7() === true) {
return $('input[name="cvid"]').val();
} else {
return jQuery('#customFilter').val();
}
},
selectRecordPopup: function (params, multiple) {
var aDeferred = jQuery.Deferred();
var popupInstance = Vtiger_Popup_Js.getInstance();
if (FlexUtils.isVT7()) {
if(typeof params == 'string') {
params = {
'module':params,
'view':'Popup',
'src_module':'Emails', // module=Documents&view=&src_module=Emails&src_field=testfield&multi_select=1
'src_field':'testfield'
};
}
if(typeof multiple != 'undefined' && multiple === true) {
params.multi_select = 1;
}
app.event.off('FlexUtils.SelectRecord');
app.event.one('FlexUtils.SelectRecord', function (e, data) {
aDeferred.resolveWith(window, [jQuery.parseJSON(data)]);
});
popupInstance.showPopup(params, 'FlexUtils.SelectRecord', function (data2) { /* Callback when visible **/ });
}
else {
if(typeof params == 'string') {
params = {
'module':params,
'view':'Popup',
'src_module':'Emails', // module=Documents&view=&src_module=Emails&src_field=testfield&multi_select=1
'src_field':'testfield'
};
}
if(typeof multiple != 'undefined' && multiple === true) {
params.multi_select = 1;
}
popupInstance.show(params, function (data) {
aDeferred.resolveWith(data);
});
}
return aDeferred.promise();
},
getCurrentLayout: function () {
if (FlexUtils.layout !== null) {
return FlexUtils.layout;
}
var skinpath = jQuery('body').data('skinpath');
var matches = skinpath.match(/layouts\/([^/]+)/);
if (matches.length >= 2) {
FlexUtils.layout = matches[1];
return matches[1];
}
FlexUtils.layout = 'vlayout';
return 'vlayout';
},
getQueryParams: function (paramName) {
var sURL = window.document.URL.toString();
if (sURL.indexOf("?") > 0) {
var arrParams = sURL.split("?");
var arrURLParams = arrParams[1].split("&");
var arrParamNames = new Array(arrURLParams.length);
var arrParamValues = new Array(arrURLParams.length);
var i = 0;
for (i = 0; i < arrURLParams.length; i++) {
var sParam = arrURLParams[i].split("=");
arrParamNames[i] = sParam[0];
if (sParam[1] != "") {
arrParamValues[i] = decodeURI(sParam[1]);
} else {
arrParamValues[i] = "No Value";
}
}
for (i = 0; i < arrURLParams.length; i++) {
if (arrParamNames[i] == paramName) {
//alert("Parameter:" + arrParamValues[i]);
return arrParamValues[i];
}
}
}
return false;
},
onListChange: function() {
if (FlexCache.get('__onListChangeSignal', false) == false) {
var aSignal = new FlexUtils.Signal();
app.event.on("post.listViewFilter.click", function (e, container) {
aSignal.dispatch(container);
});
FlexCache.set('__onListChangeSignal', aSignal);
}
return FlexCache.get('__onListChangeSignal');
},
onRelatedListChange: function () {
if (FlexCache.get('__onRelatedListChangeSignal', false) == false) {
var aSignal = new FlexUtils.Signal();
app.event.on("post.relatedListLoad.click", function (e, container) {
aSignal.dispatch(container);
});
FlexCache.set('__onRelatedListChangeSignal', aSignal);
}
return FlexCache.get('__onRelatedListChangeSignal');
},
UUIDCounter: 1,
FieldChangeEventInit: false,
// Will register an event, when a field is changed
onFieldChange: function (parentEle) {
if(typeof parentEle === 'undefined') {
parentEle = 'div#page';
}
// Only register one signal for FieldChanges
if (jQuery(parentEle).data('fielduid') === undefined) {
jQuery(parentEle).data('fielduid', 'parentEle' + FlexUtils.UUIDCounter);
FlexUtils.UUIDCounter++;
}
var Fielduid = jQuery(parentEle).data('fielduid');
jQuery(parentEle).addClass('RedooFieldChangeTracker');
var aSignal;
if (FlexCache.get('__onFieldChangeSignal' + Fielduid, false) == false) {
aSignal = new FlexUtils.Signal();
if (FlexUtils.isVT7()) {
if (FlexUtils.FieldChangeEventInit === false) {
if(typeof Vtiger_Detail_Js !== 'undefined') {
app.event.on(Vtiger_Detail_Js.PostAjaxSaveEvent, function (e, fieldBasicData, postSaveRecordDetails, contentHolder) {
var fieldElement = fieldBasicData.closest('.RedooFieldChangeTracker');
var Fielduid = fieldElement.data('fielduid');
aSignal = FlexCache.get('__onFieldChangeSignal' + Fielduid);
aSignal.dispatch({
name: fieldBasicData.data('name'),
"new": postSaveRecordDetails[fieldBasicData.data('name')].value
}, fieldBasicData, postSaveRecordDetails, contentHolder);
});
FlexUtils.FieldChangeEventInit = true;
}
}
}
else {
if(FlexUtils.getViewMode() !== "listview" && typeof Vtiger_Detail_Js !== "undefined") {
var thisInstance = Vtiger_Detail_Js.getInstance();
var detailContentsHolder = thisInstance.getContentHolder();
detailContentsHolder.on(thisInstance.fieldUpdatedEvent, function(e, values) {
var target = $(e.target);
var fieldName = target.attr('name');
var fieldElement = target.closest('.RedooFieldChangeTracker');
var Fielduid = fieldElement.data('fielduid');
aSignal = FlexCache.get('__onFieldChangeSignal' + Fielduid);
aSignal.dispatch({
name: fieldName,
"new": values.new
}, values, {}, detailContentsHolder);
});
}
}
FlexCache.set('__onFieldChangeSignal' + Fielduid, aSignal);
}
else {
aSignal = FlexCache.get('__onFieldChangeSignal' + Fielduid);
}
return FlexCache.get('__onFieldChangeSignal' + Fielduid);
},
getRecordLabels: function (ids) {
var aDeferred = jQuery.Deferred();
var newIds = [];
var LabelCache = FlexCache.get('LabelCache', {});
jQuery.each(ids, function (index, value) {
if (typeof LabelCache[value] == 'undefined') {
newIds.push(value);
}
});
if (newIds.length > 0) {
FlexAjax.postAction('RecordLabel', {
ids: newIds,
'dataType': 'json'
}).then(function (response) {
jQuery.each(response.result, function (id, value) {
LabelCache[id] = value;
});
FlexCache.set('LabelCache', LabelCache);
aDeferred.resolveWith({}, [LabelCache]);
});
}
else {
aDeferred.resolveWith({}, [LabelCache]);
}
return aDeferred.promise();
},
getFieldList: function (moduleName) {
var aDeferred = jQuery.Deferred();
if (typeof _FlexCache.FieldLoadQueue[moduleName] != 'undefined') {
return _FlexCache.FieldLoadQueue[moduleName];
}
_FlexCache.FieldLoadQueue[moduleName] = aDeferred;
if (typeof _FlexCache.FieldCache[moduleName] != 'undefined') {
aDeferred.resolve(_FlexCache.FieldCache[moduleName]);
return aDeferred.promise();
}
FlexAjax.post('index.php', {
'module': ScopeName,
'mode': 'GetFieldList',
'action': 'RedooUtils',
'module_name': moduleName
}, 'json').then(function (data) {
_FlexCache.FieldCache[moduleName] = data;
aDeferred.resolve(data.fields);
});
return aDeferred.promise();
},
filterFieldListByFieldtype: function (fields, fieldtype) {
var result = {};
jQuery.each(fields, function (blockLabel, fields) {
var block = [];
jQuery.each(fields, function (fieldName, fieldData) {
if (fieldData.type == fieldtype) {
block.push(fieldData);
}
});
if (block.length > 0) {
result[blockLabel] = block;
}
});
return result;
},
fillFieldSelect: function (fieldId, selected, module, fieldtype) {
if (typeof fieldtype == 'undefined') {
fieldtype = '';
}
if (typeof module == 'undefined' && typeof window.moduleName !== 'undefined') {
module = window.moduleName;
}
if (typeof selected == 'string') {
selected = [selected];
}
FlexUtils.getFieldList(module, fieldtype).then(function (fields) {
if (fieldtype != '') {
fields = FlexUtils.filterFieldListByFieldtype(fields, fieldtype);
}
var html = '';
jQuery.each(fields, function (blockLabel, fields) {
html += '<optgroup label="' + blockLabel + '">';
jQuery.each(fields, function (index, field) {
html += '<option value="' + field.name + '" ' + (jQuery.inArray(field.name, selected) != -1 ? 'selected="selected"' : '') + '>' + field.label + '</option>';
});
html += '</optgroup>';
jQuery('#' + fieldId).html(html);
if (jQuery('#' + fieldId).hasClass('select2')) {
jQuery('#' + fieldId).select2('val', selected);
}
jQuery('#' + fieldId).trigger('FieldsLoaded');
});
});
},
_getDefaultParentEle: function () {
return 'div#page';
},
getMainModule: function (parentEle) {
if (FlexUtils.isVT7()) {
return FlexUtils._getMainModuleVT7(parentEle);
}
else {
return FlexUtils._getMainModuleVT6(parentEle);
}
},
_getMainModuleVT6: function (parentEle) {
if (typeof parentEle == 'undefined') {
parentEle = FlexUtils._getDefaultParentEle();
}
var viewMode = FlexUtils.getViewMode(parentEle);
if (viewMode == 'detailview' || viewMode == 'summaryview') {
return $('#module', parentEle).val();
}
else if (viewMode == 'editview' || viewMode == 'quickcreate') {
return $('[name="module"]', parentEle).val();
}
else if (viewMode == 'listview') {
return $('#module', parentEle).val();
}
else if (viewMode == 'relatedview') {
if ($('[name="relatedModuleName"]', parentEle).length > 0) {
return $('[name="relatedModuleName"]', parentEle).val();
}
if ($('#module', parentEle).length > 0) {
return $('#module', parentEle).val();
}
}
var QueryModule = FlexUtils.getQueryParams('module');
if (QueryModule !== false) {
return QueryModule;
}
return '';
},
_getMainModuleVT7: function (parentEle) {
if (typeof parentEle == 'undefined') {
parentEle = FlexUtils._getDefaultParentEle();
}
var viewMode = FlexUtils.getViewMode(parentEle);
if ($(parentEle).data('forcerecordmodule') !== undefined) {
return $(parentEle).data('forcerecordmodule');
}
if (parentEle != '#overlayPageContent.in' && $('#overlayPageContent.in').length > 0) {
return FlexUtils._getMainModuleVT7('#overlayPageContent.in');
}
if (typeof _META != 'undefined' &&
(viewMode == 'detailview' ||
viewMode == 'summaryview' ||
viewMode == 'commentview' ||
viewMode == 'historyview' ||
viewMode == 'editview' ||
viewMode == 'listview') &&
($(parentEle).hasClass('modal') == false)) {
return _META.module;
}
else {
if (viewMode == 'detailview' || viewMode == 'summaryview') {
return $('#module', parentEle).val();
}
else if (viewMode == 'editview' || viewMode == 'quickcreate') {
if ($('#module', parentEle).length > 0) {
return $('#module', parentEle).val();
}
else {
return $('[name="module"]', parentEle).val();
}
}
else if (viewMode == 'listview') {
return $('#module', parentEle).val();
}
else if (viewMode == 'relatedview') {
if ($('[name="relatedModuleName"]', parentEle).length > 0) {
return $('[name="relatedModuleName"]', parentEle).val();
}
if ($('#module', parentEle).length > 0) {
return $('#module', parentEle).val();
}
}
}
var QueryModule = FlexUtils.getQueryParams('module');
if (QueryModule !== false) {
return QueryModule;
}
return '';
},
getMainRecordId: function () {
var parentEle = 'div#page';
if (typeof parentEle == 'undefined') {
parentEle = FlexUtils._getDefaultParentEle();
}
var recordId = false;
var viewMode = FlexUtils.getViewMode(parentEle);
// if (viewMode == 'detailview' || viewMode == 'summaryview') {
recordId= $('#recordId', parentEle).val();
// }
return recordId;
},
getRecordIds: function (parentEle) {
if (typeof parentEle == 'undefined') {
parentEle = FlexUtils._getDefaultParentEle();
}
var recordIds = [];
var viewMode = FlexUtils.getViewMode(parentEle);
if (viewMode == 'detailview' || viewMode == 'summaryview') {
recordIds.push($('#recordId', parentEle).val());
}
else if (viewMode == 'quickcreate') {
// do nothing
}
else if (viewMode == 'editview') {
recordIds.push($('[name="record"]').val());
}
else if (viewMode == 'listview') {
$('.listViewEntries').each(function (index, value) {
recordIds.push($(value).data('id'));
});
}
else if (viewMode == 'relatedview') {
$('.listViewEntries').each(function (index, value) {
recordIds.push($(value).data('id'));
});
}
return recordIds;
},
onQuickCreate: function(callback) {
jQuery('.quickCreateModule, .addButton[data-url*="QuickCreate"]').on('click', function __checkQC() {
if (jQuery('.quickCreateContent', '.modelContainer').length == 0) {
window.setTimeout(__checkQC, 200);
} else {
var form = jQuery('.modelContainer');
console.log('onQuickCreate Done');
callback(form.find('input[name="module"]').val(), form);
}
});
},
getViewMode: function (parentEle) {
if (FlexUtils.isVT7()) {
return FlexUtils._getViewModeVT7(parentEle);
}
else {
return FlexUtils._getViewModeVT6(parentEle);
}
},
_getViewModeVT6: function (parentEle) {
if (typeof parentEle == 'undefined') {
parentEle = FlexUtils._getDefaultParentEle();
}
var viewEle = $("#view", parentEle);
_FlexCache.viewMode = false;
if (viewEle.length > 0 && viewEle[0].value == "List") {
_FlexCache.viewMode = "listview";
}
if ($(".detailview-table", parentEle).length > 0) {
_FlexCache.viewMode = "detailview";
}
else if ($(".summaryView", parentEle).length > 0) {
_FlexCache.viewMode = "summaryview";
}
else if ($(".recordEditView", parentEle).length > 0) {
if ($('.quickCreateContent', parentEle).length == 0) {
_FlexCache.viewMode = "editview";
}
else {
_FlexCache.viewMode = "quickcreate";
}
}
if ($('.relatedContents', parentEle).length > 0) {
_FlexCache.viewMode = "relatedview";
if ($('td[data-field-type]', parentEle).length > 0) {
_FlexCache.popUp = false;
}
else {
_FlexCache.popUp = true;
}
}
if (_FlexCache.viewMode === false) {
if ($('#view', parentEle).length > 0) {
if ($('#view', parentEle).val() == 'Detail') {
_FlexCache.viewMode = 'detailview';
}
}
}
return _FlexCache.viewMode;
},
_getViewModeVT7: function (parentEle) {
if (typeof parentEle == 'undefined') {
parentEle = FlexUtils._getDefaultParentEle();
}
_FlexCache.viewMode = false;
if ($(".detailview-table", parentEle).length > 0) {
_FlexCache.viewMode = "detailview";
}
else if ($(".summaryView", parentEle).length > 0) {
_FlexCache.viewMode = "summaryview";
}
else if ($(".recordEditView", parentEle).length > 0) {
if ($('.quickCreateContent', parentEle).length == 0) {
_FlexCache.viewMode = "editview";
}
else {
_FlexCache.viewMode = "quickcreate";
}
}
else if ($(".commentsRelatedContainer", parentEle).length > 0) {
_FlexCache.viewMode = "commentview";
}
else if ($(".HistoryContainer", parentEle).length > 0) {
_FlexCache.viewMode = "historyview";
}
else if (jQuery('.relatedContainer', parentEle).find('.relatedModuleName').length > 0) {
_FlexCache.viewMode = "relatedview";
}
else if (jQuery('.listViewContentHeader', parentEle).length > 0 && typeof _META != 'undefined' && _META.view == 'List') {
_FlexCache.viewMode = "listview";
}
if (_FlexCache.viewMode === false) {
if ($('#view', parentEle).length > 0) {
if ($('#view', parentEle).val() == 'Detail') {
_FlexCache.viewMode = 'detailview';
}
}
}
return _FlexCache.viewMode;
},
getContentMaxHeight: function() {
if(FlexUtils.isVT7() == false) {
switch(FlexUtils.getCurrentLayout()) {
case 'begbie':
return jQuery('.mainContainer').height();
default:
return jQuery('#leftPanel').height() - 50;
}
} else {
return jQuery('#page').height();
}
},
getContentMaxWidth: function() {
if(FlexUtils.isVT7() == false) {
return jQuery('#rightPanel').width();
}
},
hideModalBox: function (content) {
if (FlexUtils.isVT7() === true) {
app.helper.hideModal();
}
else {
app.hideModalWindow();
}
},
showModalBox: function (content,params) {
var aDeferred = jQuery.Deferred();
if (FlexUtils.isVT7() === false) {
app.showModalWindow(content, function (data) {
aDeferred.resolveWith(window, data);
});
} else {
if(typeof params == 'undefined') {
params = { close:function() { }};
}
if(typeof params.close == 'undefined') {
params.close = function() { };
}
FlexCache.set('__onModalClose', params.close);
if(jQuery('.myModal .modal-dialog').length > 0 && jQuery('.modal.in').length > 0) {
jQuery('.myModal .modal-dialog').replaceWith(content);
aDeferred.resolveWith(window, jQuery('.modal.myModal')[0]);
} else {
var container = app.helper.showModal(content, {
cb: function (data) {
aDeferred.resolveWith(window, data);
}
});
container.off('hidden.bs.modal').on('hidden.bs.modal', function() {
params.close();
});
}
}
return aDeferred.promise();
},
showContentOverlay: function(data, params) {
if(FlexUtils.isVT7()) {
return app.helper.loadPageContentOverlay(data, params);
} else {
if($('#overlayPageContent').length == 0) {
$('body').append('<div id=\'overlayPageContent\' style="margin:0;" class=\'fade modal content-area overlayPageContent overlay-container-60\' tabindex=\'-1\' role=\'dialog\' aria-hidden=\'true\'>\n' +
' <div class="data">\n' +
' </div>\n' +
' <div class="modal-dialog">\n' +
' </div>\n' +
' </div>');
}
var aDeferred = new jQuery.Deferred();
var defaultParams = {
backdrop:true,
show:true,
keyboard: false
};
params = jQuery.extend(defaultParams, params);
var overlayPageContent = $('#overlayPageContent');
//if(jQuery(".content-area").length && jQuery(".content-area").hasClass('full-width')|| (jQuery('.settingsgroup').length === 0 && jQuery('#modules-menu').length === 0)){
overlayPageContent.addClass('full-width');
//}
var alreadyShown = false;
if(overlayPageContent.hasClass('in')) {
alreadyShown = true;
}
overlayPageContent.one('shown.bs.modal',function(){
aDeferred.resolve($('#overlayPageContent'));
});
overlayPageContent.one('hidden.bs.modal',function(){
overlayPageContent.find('.data').html('');
});
overlayPageContent.find('.data').html(data);
//vtUtils.applyFieldElementsView(overlayPageContent);
overlayPageContent.modal(params);
if(alreadyShown) {
aDeferred.resolve(jQuery('#overlayPageContent'));
}
return aDeferred.promise();
}
},
hideContentOverlay: function() {
if(FlexUtils.isVT7()) {
app.helper.hidePageContentOverlay();
} else {
var aDeferred = new jQuery.Deferred();
var overlayPageContent = $('#overlayPageContent');
overlayPageContent.one('hidden.bs.modal', function() {
overlayPageContent.find('.data').html('');
aDeferred.resolve();
});
$('#overlayPageContent').modal('hide');
return aDeferred.promise();
}
},
setFieldValue: function (fieldName, fieldValue, parentEle) {
if (typeof parentEle == 'undefined' || parentEle == null) {
parentEle = FlexUtils._getDefaultParentEle();
}
var fieldElement = FlexUtils.getFieldElement(fieldName, parentEle, true);
switch (fieldElement.prop('tagName')) {
case 'INPUT':
switch (fieldElement.attr('type')) {
case 'text':
if (fieldElement.hasClass('dateField')) {
if(FlexUtils.isVT7()) {
fieldElement.datepicker('update', fieldValue);
} else {
if(fieldValue !== '') {
fieldElement.val(fieldValue).DatePickerSetDate(fieldValue, true);
} else {
fieldElement.val(fieldValue).DatePickerClear();
}
}
}
else {
fieldElement.val(fieldValue);
}
break;
case 'hidden':
if (fieldElement.hasClass('sourceField')) {
var obj = Vtiger_Edit_Js.getInstance();
var container = fieldElement.closest('td');
if (fieldValue.id != '') {
obj.setReferenceFieldValue(container, { id: fieldValue.id, name: fieldValue.label });
}
else {
$('.clearReferenceSelection', container).trigger('click');
}
}
break;
}
break;
case 'SELECT':
fieldElement.val(fieldValue);
if(FlexUtils.isVT7() === false) {
if (fieldElement.hasClass('chzn-select')) {
fieldElement.trigger('liszt:updated');
}
} else {
if (fieldElement.hasClass('select2')) {
fieldElement.trigger('change.select2');
}
}
break;
}
},
layoutDependValue: function (value, defaultValue) {
var currentLayout = FlexUtils.getCurrentLayout();
if (typeof value[currentLayout] !== 'undefined') {
return value[currentLayout];
}
return defaultValue;
},
getFieldElement: function (fieldName, parentEle, returnInput) {
if (typeof parentEle == 'undefined' || parentEle == null) {
parentEle = FlexUtils._getDefaultParentEle();
}
if (typeof returnInput == 'undefined') {
returnInput = false;
}
if (typeof fieldName == "object") {
return fieldName;
}
var fieldElement = false;
if (FlexUtils.getViewMode(parentEle) == "detailview") {
if ($('#' + FlexUtils.getMainModule(parentEle) + '_detailView_fieldValue_' + fieldName, parentEle).length > 0 || $('#Events_detailView_fieldValue_' + fieldName, parentEle).length > 0) {
fieldElement = $('#' + FlexUtils.getMainModule(parentEle) + '_detailView_fieldValue_' + fieldName);
if (FlexUtils.getMainModule(parentEle) == 'Calendar' && fieldElement.length == 0) {
fieldElement = $('#Events_detailView_fieldValue_' + fieldName, parentEle);
}
}
else if ($('#_detailView_fieldValue_' + fieldName, parentEle).length > 0) {
fieldElement = $('#_detailView_fieldValue_' + fieldName, parentEle);
}
}
else if (FlexUtils.getViewMode(parentEle) == "summaryview") {
var ele_1;
if (FlexUtils.isVT7()) {
ele_1 = jQuery('[data-name="' + fieldName + '"]', this.parentEle);
}
else {
ele_1 = jQuery('[name="' + fieldName + '"]', this.parentEle);
}
if (ele_1.length == 0) {
return false;
/*
if(typeof this.summaryFields[fieldName] != 'undefined') {
fieldElement = jQuery(jQuery(FlexUtils.getCurrentLayout() == 'vlayout' ? '.summary-table td.fieldValue' : '.summary-table div.mycdivfield')[this.summaryFields[fieldName] - 1]);
} else {
return false;
}*/
}
else {
fieldElement = $(ele_1[0]).closest(FlexUtils.layoutDependValue({
'vlayout': 'td',
'v7': '.row',
'begbie': 'div.mycdivfield',
'responsive': '.row',
}, 'td'));
}
}
else if (FlexUtils.getViewMode(parentEle) == "editview" || FlexUtils.getViewMode(parentEle) == 'quickcreate') {
var ele = $('[name="' + fieldName + '"]', parentEle);
if (ele.length == 0) {
return false;
}
if (returnInput == true) {
return ele;
}
fieldElement = $(ele[0]).closest(FlexUtils.layoutDependValue({
'vlayout': '.fieldValue',
'v7': '.fieldValue',
'begbie': 'div.mycdivfield',
'responsive': '.fieldValue'
}, '.fieldValue'));
}
else if (FlexUtils.getViewMode(parentEle) == 'listview') {
if (FlexUtils.listViewFields === false) {
FlexUtils.listViewFields = FlexUtils.getListFields(parentEle);
}
if (FlexUtils.currentLVRow !== null) {
if (typeof FlexUtils.listViewFields[fieldName] != 'undefined') {
if (FlexUtils.listViewFields[fieldName] >= 0) {
fieldElement = $($('td.listViewEntryValue', FlexUtils.currentLVRow)[FlexUtils.listViewFields[fieldName]]);
}
else {
fieldElement = $($('td.listViewEntryValue', FlexUtils.currentLVRow)[Number(FlexUtils.listViewFields[fieldName] + 100) * -1]);
}
}
else {
return false;
}
}
else {
return false;
}
}
else if (FlexUtils.getViewMode(parentEle) == 'relatedview') {
if (FlexUtils.listViewFields === false) {
FlexUtils.listViewFields = FlexUtils.getListFields(parentEle);
}
if ($('td[data-field-type]', FlexUtils.currentLVRow).length > 0) {
fieldElement = $($('td[data-field-type]', FlexUtils.currentLVRow)[FlexUtils.listViewFields[fieldName]]);
}
else {
fieldElement = $($('td.listViewEntryValue', FlexUtils.currentLVRow)[FlexUtils.listViewFields[fieldName]]);
}
}
return fieldElement;
},
refreshContent: function (viewName, isSettings, params, convertComponents) {
if (typeof params === 'undefined') {
convertComponents = false;
}
if (typeof params === 'undefined') {
params = {};
}
if (typeof isSettings === 'undefined') {
isSettings = false;
}
params.module = ScopeName;
params.view = viewName;
if (isSettings === true) {
params.parent = 'Settings';
}
var aDeferred = jQuery.Deferred();
if (FlexUtils.isVT7()) {
FlexAjax.request(params).then(function (data) {
var target;
if(jQuery('.settingsPageDiv').length > 0) {
jQuery(".settingsPageDiv").html(data);
target = jQuery(".settingsPageDiv");
} else {
jQuery(".ContentReplacement").html(data);
target = jQuery(".ContentReplacement");
}
if(convertComponents === true) {
jQuery(".select2", target).select2();
}
aDeferred.resolve();
});
}
else {
FlexAjax.request(params).then(function (data) {
jQuery(jQuery(".contentsDiv")[0]).html(data);
if(convertComponents === true) {
jQuery(jQuery(".contentsDiv")[0]).find('.select2').select2();
}
aDeferred.resolve();
});
}
return aDeferred.promise();
},
getListFields: function (parentEle) {
var cols;
if(FlexUtils.isVT7()) {
cols = jQuery(".listview-table .listViewContentHeaderValues", parentEle);
} else {
cols = jQuery(".listViewEntriesTable .listViewHeaderValues", parentEle);
}
var listViewFields = {};
for (var colIndex in cols) {
if (cols.hasOwnProperty(colIndex) && jQuery.isNumeric(colIndex)) {
var value = cols[colIndex];
if (jQuery(value).data("columnname") == undefined) {
listViewFields[jQuery(value).data("fieldname")] = colIndex;
}
else {
listViewFields[jQuery(value).data("columnname")] = colIndex;
}
}
}
return listViewFields;
},
loadStyles: function (urls, nocache) {
if (typeof urls == 'string') {
urls = [urls];
}
var aDeferred = jQuery.Deferred();
if (typeof nocache == 'undefined') {
nocache = false; // default don't refresh
}
$.when.apply($, $.map(urls, function (url) {
if (nocache) {
url += '?_ts=' + new Date().getTime(); // refresh?
}
return $.get(url, function () {
$('<link>', { rel: 'stylesheet', type: 'text/css', 'href': url }).appendTo('head');
});
})).then(function () {
aDeferred.resolve();
});
return aDeferred.promise();
},
loadScript: function (url, options) {
var aDeferred = jQuery.Deferred();
if (typeof FlexCache.loadedScript == 'undefined') {
FlexCache.loadedScript = {};
}
if (typeof FlexCache.loadedScript[url] != 'undefined') {
aDeferred.resolve();
return aDeferred;
}
// Allow user to set any option except for dataType, cache, and url
options = jQuery.extend(options || {}, {
dataType: "script",
cache: true,
url: url
});
// Use $.ajax() since it is more flexible than $.getScript
// Return the jqXHR object so we can chain callbacks
return jQuery.ajax(options);
}
};var _FlexCache = {
'FieldCache': {},
'FieldLoadQueue': {},
'viewMode': false,
'popUp': false
};
if(typeof console != 'undefined' && typeof console.log != 'undefined') {
console.log('Initialize FlexUtils ' + ScopeName + " V" + Version);
}
if (typeof window.FlexStore == 'undefined') {
window.FlexStore = {};
}
if (typeof window.RedooStore == 'undefined') {
window.RedooStore = {};
}
window.RedooStore[ScopeName] = window.FlexStore[ScopeName] = {
'Ajax': FlexAjax,
'Utils': FlexUtils,
'Cache': FlexCache,
'Form': FlexForm,
'Translate': FlexTranslate
};
if (typeof window.FlexAjax == 'undefined') {
/**
* @ignore
* @param {string} ScopeName
* @returns {FlexAjax}
*/
window.FlexAjax = function (ScopeName) {
if (typeof window.FlexStore[ScopeName] != 'undefined') {
return window.FlexStore[ScopeName].Ajax;
}
if (typeof window.RedooStore[ScopeName] != 'undefined') {
return window.RedooStore[ScopeName].Ajax;
}
console.error('FlexAjax ' + ScopeName + ' Scope not found');
};
}
if (typeof window.RedooAjax == 'undefined') {
window.RedooAjax = window.FlexAjax;
}
if (typeof window.FlexUtils == 'undefined') {
/**
* @ignore
* @param ScopeName
* @returns FlexUtils
* @constructor
*/
window.FlexUtils = function (ScopeName) {
if (typeof window.FlexStore[ScopeName] != 'undefined') {
return window.FlexStore[ScopeName].Utils;
}
if (typeof window.RedooStore[ScopeName] != 'undefined') {
return window.RedooStore[ScopeName].Utils;
}
console.error('FlexUtils ' + ScopeName + ' Scope not found');
};
}
if (typeof window.RedooUtils == 'undefined') {
window.RedooUtils = window.FlexUtils;
}
if (typeof window.FlexCache == 'undefined') {
/**
* @ignore
* @param ScopeName
* @returns FlexCache
* @constructor
*/
window.FlexCache = function (ScopeName) {
if (typeof window.RedooStore[ScopeName] != 'undefined') {
return window.RedooStore[ScopeName].Cache;
}
if (typeof window.FlexStore[ScopeName] != 'undefined') {
return window.FlexStore[ScopeName].Cache;
}
console.error('FlexCache ' + ScopeName + ' Scope not found');
};
}
if (typeof window.RedooCache == 'undefined') {
window.RedooCache = window.FlexCache;
}
if (typeof window.FlexForm == 'undefined') {
/**
* @ignore
* @param ScopeName
* @returns FlexCache
* @constructor
*/
window.FlexForm = function (ScopeName) {
if (typeof window.FlexStore[ScopeName] != 'undefined') {
return window.FlexStore[ScopeName].Form;
}
console.error('FlexForm ' + ScopeName + ' Scope not found');
};
}
if (typeof window.FlexTranslate == 'undefined') {
/**
* @ignore
* @param ScopeName
* @returns FlexCache
* @constructor
*/
window.FlexTranslate = function (ScopeName) {
if (typeof window.FlexStore[ScopeName] != 'undefined') {
return window.FlexStore[ScopeName].Translate;
}
console.error('FlexTranslate ' + ScopeName + ' Scope not found');
};
}
if (typeof window.FlexEvents == 'undefined') {
/**
* @ignore
* @returns jQuery Eventhandler
* @constructor
*/
window.FlexEvents = $({});
}// Dependency
/* jshint ignore:start */
/*
JS Signals <http://millermedeiros.github.com/js-signals/>
Released under the MIT license
Author: Miller Medeiros
Version: 1.0.0 - Build: 268 (2012/11/29 05:48 PM)
*/
function h(a, b, c, d, e) { this._listener = b; this._isOnce = c; this.context = d; this._signal = a; this._priority = e || 0; }
function g(a, b) { if (typeof a !== "function")
throw Error("listener is a required param of {fn}() and should be a Function.".replace("{fn}", b)); }
function e() { this._bindings = []; this._prevParams = null; var a = this; this.dispatch = function () { e.prototype.dispatch.apply(a, arguments); }; }
h.prototype = { active: !0, params: null, execute: function (a) {
var b;
this.active && this._listener && (a = this.params ? this.params.concat(a) :
a, b = this._listener.apply(this.context, a), this._isOnce && this.detach());
return b;
}, detach: function () { return this.isBound() ? this._signal.remove(this._listener, this.context) : null; }, isBound: function () { return !!this._signal && !!this._listener; }, isOnce: function () { return this._isOnce; }, getListener: function () { return this._listener; }, getSignal: function () { return this._signal; }, _destroy: function () { delete this._signal; delete this._listener; delete this.context; }, toString: function () {
return "[SignalBinding isOnce:" + this._isOnce +
", isBound:" + this.isBound() + ", active:" + this.active + "]";
} };
e.prototype = { VERSION: "1.0.0", memorize: !1, _shouldPropagate: !0, active: !0, _registerListener: function (a, b, c, d) { var e = this._indexOfListener(a, c); if (e !== -1) {
if (a = this._bindings[e], a.isOnce() !== b)
throw Error("You cannot add" + (b ? "" : "Once") + "() then add" + (!b ? "" : "Once") + "() the same listener without removing the relationship first.");
}
else
a = new h(this, a, b, c, d), this._addBinding(a); this.memorize && this._prevParams && a.execute(this._prevParams); return a; },
_addBinding: function (a) { var b = this._bindings.length; do
--b;
while (this._bindings[b] && a._priority <= this._bindings[b]._priority); this._bindings.splice(b + 1, 0, a); }, _indexOfListener: function (a, b) { for (var c = this._bindings.length, d; c--;)
if (d = this._bindings[c], d._listener === a && d.context === b)
return c; return -1; }, has: function (a, b) { return this._indexOfListener(a, b) !== -1; }, add: function (a, b, c) { g(a, "add"); return this._registerListener(a, !1, b, c); }, addOnce: function (a, b, c) {
g(a, "addOnce");
return this._registerListener(a, !0, b, c);
}, remove: function (a, b) { g(a, "remove"); var c = this._indexOfListener(a, b); c !== -1 && (this._bindings[c]._destroy(), this._bindings.splice(c, 1)); return a; }, removeAll: function () { for (var a = this._bindings.length; a--;)
this._bindings[a]._destroy(); this._bindings.length = 0; }, getNumListeners: function () { return this._bindings.length; }, halt: function () { this._shouldPropagate = !1; }, dispatch: function (a) {
if (this.active) {
var b = Array.prototype.slice.call(arguments), c = this._bindings.length, d;
if (this.memorize)
this._prevParams =
b;
if (c) {
d = this._bindings.slice();
this._shouldPropagate = !0;
do
c--;
while (d[c] && this._shouldPropagate && d[c].execute(b) !== !1);
}
}
}, forget: function () { this._prevParams = null; }, dispose: function () { this.removeAll(); delete this._bindings; delete this._prevParams; }, toString: function () { return "[Signal active:" + this.active + " numListeners:" + this.getNumListeners() + "]"; } };
var f = e;
f.Signal = e;
FlexUtils.Signal = f.Signal;
/*
* jQuery BlockUI; v20141123
* http://jquery.malsup.com/block/
* Copyright (c) 2014 M. Alsup; Dual licensed: MIT/GPL
*/
(function () {
"use strict";
function e(e) { function o(o, i) { var s, h, k = o == window, v = i && void 0 !== i.message ? i.message : void 0; if (i = e.extend({}, FlexUtils.blockUI.defaults, i || {}), !i.ignoreIfBlocked || !e(o).data("blockUI.isBlocked")) {
if (i.overlayCSS = e.extend({}, FlexUtils.blockUI.defaults.overlayCSS, i.overlayCSS || {}), s = e.extend({}, FlexUtils.blockUI.defaults.css, i.css || {}), i.onOverlayClick && (i.overlayCSS.cursor = "pointer"), h = e.extend({}, FlexUtils.blockUI.defaults.themedCSS, i.themedCSS || {}), v = void 0 === v ? i.message : v, k && b && t(window, { fadeOut: 0 }), v && "string" != typeof v && (v.parentNode || v.jquery)) {
var y = v.jquery ? v[0] : v, m = {};
e(o).data("blockUI.history", m), m.el = y, m.parent = y.parentNode, m.display = y.style.display, m.position = y.style.position, m.parent && m.parent.removeChild(y);
}
e(o).data("blockUI.onUnblock", i.onUnblock);
var g, I, w, U, x = i.baseZ;
g = r || i.forceIframe ? e('<iframe class="blockUI" style="z-index:' + x++ + ';display:none;border:none;margin:0;padding:0;position:absolute;width:100%;height:100%;top:0;left:0" src="' + i.iframeSrc + '"></iframe>') : e('<div class="blockUI" style="display:none"></div>'), I = i.theme ? e('<div class="blockUI blockOverlay ui-widget-overlay" style="z-index:' + x++ + ';display:none"></div>') : e('<div class="blockUI blockOverlay" style="z-index:' + x++ + ';display:none;border:none;margin:0;padding:0;width:100%;height:100%;top:0;left:0"></div>'), i.theme && k ? (U = '<div class="blockUI ' + i.blockMsgClass + ' blockPage ui-dialog ui-widget ui-corner-all" style="z-index:' + (x + 10) + ';display:none;position:fixed">', i.title && (U += '<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">' + (i.title || "&nbsp;") + "</div>"), U += '<div class="ui-widget-content ui-dialog-content"></div>', U += "</div>") : i.theme ? (U = '<div class="blockUI ' + i.blockMsgClass + ' blockElement ui-dialog ui-widget ui-corner-all" style="z-index:' + (x + 10) + ';display:none;position:absolute">', i.title && (U += '<div class="ui-widget-header ui-dialog-titlebar ui-corner-all blockTitle">' + (i.title || "&nbsp;") + "</div>"), U += '<div class="ui-widget-content ui-dialog-content"></div>', U += "</div>") : U = k ? '<div class="blockUI ' + i.blockMsgClass + ' blockPage" style="z-index:' + (x + 10) + ';display:none;position:fixed"></div>' : '<div class="blockUI ' + i.blockMsgClass + ' blockElement" style="z-index:' + (x + 10) + ';display:none;position:absolute"></div>', w = e(U), v && (i.theme ? (w.css(h), w.addClass("ui-widget-content")) : w.css(s)), i.theme || I.css(i.overlayCSS), I.css("position", k ? "fixed" : "absolute"), (r || i.forceIframe) && g.css("opacity", 0);
var C = [g, I, w], S = k ? e("body") : e(o);
e.each(C, function () { this.appendTo(S); }), i.theme && i.draggable && e.fn.draggable && w.draggable({ handle: ".ui-dialog-titlebar", cancel: "li" });
var O = f && (!e.support.boxModel || e("object,embed", k ? null : o).length > 0);
if (u || O) {
if (k && i.allowBodyStretch && e.support.boxModel && e("html,body").css("height", "100%"), (u || !e.support.boxModel) && !k)
var E = d(o, "borderTopWidth"), T = d(o, "borderLeftWidth"), M = E ? "(0 - " + E + ")" : 0, B = T ? "(0 - " + T + ")" : 0;
e.each(C, function (e, o) { var t = o[0].style; if (t.position = "absolute", 2 > e)
k ? t.setExpression("height", "Math.max(document.body.scrollHeight, document.body.offsetHeight) - (jQuery.support.boxModel?0:" + i.quirksmodeOffsetHack + ') + "px"') : t.setExpression("height", 'this.parentNode.offsetHeight + "px"'), k ? t.setExpression("width", 'jQuery.support.boxModel && document.documentElement.clientWidth || document.body.clientWidth + "px"') : t.setExpression("width", 'this.parentNode.offsetWidth + "px"'), B && t.setExpression("left", B), M && t.setExpression("top", M);
else if (i.centerY)
k && t.setExpression("top", '(document.documentElement.clientHeight || document.body.clientHeight) / 2 - (this.offsetHeight / 2) + (blah = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + "px"'), t.marginTop = 0;
else if (!i.centerY && k) {
var n = i.css && i.css.top ? parseInt(i.css.top, 10) : 0, s = "((document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop) + " + n + ') + "px"';
t.setExpression("top", s);
} });
}
if (v && (i.theme ? w.find(".ui-widget-content").append(v) : w.append(v), (v.jquery || v.nodeType) && e(v).show()), (r || i.forceIframe) && i.showOverlay && g.show(), i.fadeIn) {
var j = i.onBlock ? i.onBlock : c, H = i.showOverlay && !v ? j : c, z = v ? j : c;
i.showOverlay && I._fadeIn(i.fadeIn, H), v && w._fadeIn(i.fadeIn, z);
}
else
i.showOverlay && I.show(), v && w.show(), i.onBlock && i.onBlock.bind(w)();
if (n(1, o, i), k ? (b = w[0], p = e(i.focusableElements, b), i.focusInput && setTimeout(l, 20)) : a(w[0], i.centerX, i.centerY), i.timeout) {
var W = setTimeout(function () { k ? e.unblockUI(i) : e(o).unblock(i); }, i.timeout);
e(o).data("blockUI.timeout", W);
}
} } function t(o, t) { var s, l = o == window, a = e(o), d = a.data("blockUI.history"), c = a.data("blockUI.timeout"); c && (clearTimeout(c), a.removeData("blockUI.timeout")), t = e.extend({}, FlexUtils.blockUI.defaults, t || {}), n(0, o, t), null === t.onUnblock && (t.onUnblock = a.data("blockUI.onUnblock"), a.removeData("blockUI.onUnblock")); var r; r = l ? e("body").children().filter(".blockUI").add("body > .blockUI") : a.find(">.blockUI"), t.cursorReset && (r.length > 1 && (r[1].style.cursor = t.cursorReset), r.length > 2 && (r[2].style.cursor = t.cursorReset)), l && (b = p = null), t.fadeOut ? (s = r.length, r.stop().fadeOut(t.fadeOut, function () { 0 === --s && i(r, d, t, o); })) : i(r, d, t, o); } function i(o, t, i, n) { var s = e(n); if (!s.data("blockUI.isBlocked")) {
o.each(function () { this.parentNode && this.parentNode.removeChild(this); }), t && t.el && (t.el.style.display = t.display, t.el.style.position = t.position, t.el.style.cursor = "default", t.parent && t.parent.appendChild(t.el), s.removeData("blockUI.history")), s.data("blockUI.static") && s.css("position", "static"), "function" == typeof i.onUnblock && i.onUnblock(n, i);
var l = e(document.body), a = l.width(), d = l[0].style.width;
l.width(a - 1).width(a), l[0].style.width = d;
} } function n(o, t, i) { var n = t == window, l = e(t); if ((o || (!n || b) && (n || l.data("blockUI.isBlocked"))) && (l.data("blockUI.isBlocked", o), n && i.bindEvents && (!o || i.showOverlay))) {
var a = "mousedown mouseup keydown keypress keyup touchstart touchend touchmove";
o ? e(document).bind(a, i, s) : e(document).unbind(a, s);
} } function s(o) { if ("keydown" === o.type && o.keyCode && 9 == o.keyCode && b && o.data.constrainTabKey) {
var t = p, i = !o.shiftKey && o.target === t[t.length - 1], n = o.shiftKey && o.target === t[0];
if (i || n)
return setTimeout(function () { l(n); }, 10), !1;
} var s = o.data, a = e(o.target); return a.hasClass("blockOverlay") && s.onOverlayClick && s.onOverlayClick(o), a.parents("div." + s.blockMsgClass).length > 0 ? !0 : 0 === a.parents().children().filter("div.blockUI").length; } function l(e) { if (p) {
var o = p[e === !0 ? p.length - 1 : 0];
o && o.focus();
} } function a(e, o, t) { var i = e.parentNode, n = e.style, s = (i.offsetWidth - e.offsetWidth) / 2 - d(i, "borderLeftWidth"), l = (i.offsetHeight - e.offsetHeight) / 2 - d(i, "borderTopWidth"); o && (n.left = s > 0 ? s + "px" : "0"), t && (n.top = l > 0 ? l + "px" : "0"); } function d(o, t) { return parseInt(e.css(o, t), 10) || 0; } e.fn._fadeIn = e.fn.fadeIn; var c = e.noop || function () { }, r = /MSIE/.test(navigator.userAgent), u = /MSIE 6.0/.test(navigator.userAgent) && !/MSIE 8.0/.test(navigator.userAgent); document.documentMode || 0; var f = e.isFunction(document.createElement("div").style.setExpression); FlexUtils.blockUI = function (e) { o(window, e); }; FlexUtils.unblockUI = function (e) { t(window, e); }, e.growlUI = function (o, t, i, n) { var s = e('<div class="growlUI"></div>'); o && s.append("<h1>" + o + "</h1>"), t && s.append("<h2>" + t + "</h2>"), void 0 === i && (i = 3e3); var l = function (o) { o = o || {}, e.blockUI({ message: s, fadeIn: o.fadeIn !== void 0 ? o.fadeIn : 700, fadeOut: o.fadeOut !== void 0 ? o.fadeOut : 1e3, timeout: o.timeout !== void 0 ? o.timeout : i, centerY: !1, showOverlay: !1, onUnblock: n, css: FlexUtils.blockUI.defaults.growlCSS }); }; l(), s.css("opacity"), s.mouseover(function () { l({ fadeIn: 0, timeout: 3e4 }); var o = e(".blockMsg"); o.stop(), o.fadeTo(300, 1); }).mouseout(function () { e(".blockMsg").fadeOut(1e3); }); }, e.fn.block = function (t) { if (this[0] === window)
return e.blockUI(t), this; var i = e.extend({}, FlexUtils.blockUI.defaults, t || {}); return this.each(function () { var o = e(this); i.ignoreIfBlocked && o.data("blockUI.isBlocked") || o.unblock({ fadeOut: 0 }); }), this.each(function () { "static" == e.css(this, "position") && (this.style.position = "relative", e(this).data("blockUI.static", !0)), this.style.zoom = 1, o(this, t); }); }, e.fn.unblock = function (o) { return this[0] === window ? (e.unblockUI(o), this) : this.each(function () { t(this, o); }); }, FlexUtils.blockUI.version = 2.7, FlexUtils.blockUI.defaults = { message: "<h1>Please wait...</h1>", title: null, draggable: !0, theme: !1, css: { padding: 0, margin: 0, width: "30%", top: "40%", left: "35%", textAlign: "center", color: "#000", border: "3px solid #aaa", backgroundColor: "#fff", cursor: "wait" }, themedCSS: { width: "30%", top: "40%", left: "35%" }, overlayCSS: { backgroundColor: "#000", opacity: 0.6, cursor: "wait" }, cursorReset: "default", growlCSS: { width: "350px", top: "10px", left: "", right: "10px", border: "none", padding: "5px", opacity: 0.6, cursor: "default", color: "#fff", backgroundColor: "#000", "-webkit-border-radius": "10px", "-moz-border-radius": "10px", "border-radius": "10px" }, iframeSrc: /^https/i.test(window.location.href || "") ? "javascript:false" : "about:blank", forceIframe: !1, baseZ: 2e3, centerX: !0, centerY: !0, allowBodyStretch: !0, bindEvents: !0, constrainTabKey: !0, fadeIn: 200, fadeOut: 400, timeout: 0, showOverlay: !0, focusInput: !0, focusableElements: ":input:enabled:visible", onBlock: null, onUnblock: null, onOverlayClick: null, quirksmodeOffsetHack: 4, blockMsgClass: "blockMsg", ignoreIfBlocked: !1 }; var b = null, p = []; }
"function" == typeof define && define.amd && define.amd.jQuery ? define(["jquery"], e) : e(jQuery);
})();
/* jshint ignore:end */
})(jQuery);
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkZsZXhVdGlscy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJGbGV4VXRpbHMuanMiLCJzb3VyY2VzQ29udGVudCI6W119
;jQuery(function() {
var workflowFrontendActions = new Workflow();
workflowFrontendActions.checkFrontendActions('init');
var listenCommentWidget = false;
if(typeof Vtiger_Detail_Js != 'undefined' && jQuery('#recordId').length > 0) {
var thisInstance = Vtiger_Detail_Js.getInstance();
var detailContentsHolder = thisInstance.getContentHolder();
RedooUtils('Workflow2').onFieldChange('div#page').add(function() {
workflowFrontendActions.checkFrontendActions('edit');
});
/*
detailContentsHolder.on(thisInstance.fieldUpdatedEvent, function(e, params){
var fieldName = jQuery(e.target).attr("name");
workflowFrontendActions.checkFrontendActions('edit');
});
*/
detailContentsHolder.on(thisInstance.widgetPostLoad, function(e, p) {
if(listenCommentWidget == false) return;
if(jQuery('.commentContainer', e.target).length > 0) {
listenCommentWidget = false;
workflowFrontendActions.checkFrontendActions('edit');
}
});
detailContentsHolder.on('click','.detailViewSaveComment', function(e){
listenCommentWidget = true;
});
}
/*
// TODO: UPDATE for VT7
if(typeof Vtiger_Header_Js != 'undefined') {
var thisInstance = Vtiger_Header_Js.getInstance();
thisInstance.registerQuickCreateCallBack(function(e, b, c) {
var workflowFrontendActions = new Workflow();
workflowFrontendActions.checkFrontendActions('both', e.data.result['_recordId']);
});
}
*/
jQuery(window).on('workflow.detail.sidebar.ready', function() {
jQuery('#WorkflowDesignerErrorLoaded').hide();
var workflow = new Workflow();
workflowObj = workflow;
}).on('workflow.list.sidebar.ready', function() {
jQuery('#WorkflowDesignerErrorLoaded').hide();
var workflow = new Workflow();
workflowObj = workflow;
});
/* jQuery(window).on('workflow.list.sidebar.ready', function() {
console.log('List-Sidebar ready');
}); */
if(typeof Vtiger_Edit_Js != 'undefined') {
jQuery('body').on(Vtiger_Edit_Js.referenceSelectionEvent, function (e, b, c, d) {
var workflowObj = new Workflow();
workflowObj.setBackgroundMode(true);
workflowObj.addExtraEnvironment('source_module', jQuery('[name="module"]').val())
workflowObj.addExtraEnvironment('source_record', jQuery('[name="record"]').val());
workflowObj.execute('WF_REFERENCE', b.record, function() {
workflowObj.checkFrontendActions('edit');
});
});
}
var viewMode = Workflow2Frontend.getViewMode(jQuery('div#page'));
// if (viewMode == 'detailview' || viewMode == 'summaryview') {
Workflow2Frontend.TopbuttonHandler(jQuery('div#page'));
// }
if (jQuery('#module', jQuery('div#page')).length > 0) {
if (jQuery('#module', jQuery('div#page')).val() == 'Campaigns' && typeof Campaigns_Detail_Js != 'undefined') {
// Enable ViewCheck
if (
typeof WFDFrontendConfig !== 'undefined' &&
typeof WFDFrontendConfig['relatedbtn'] !== 'undefined'
) {
var viewMode = Workflow2Frontend.getViewMode(jQuery('div#page'));
if (viewMode == 'relatedview') {
Workflow2Frontend.RelatedListHandler(jQuery('div#page'));
}
jQuery(document).on('postajaxready', function (e) {
var viewMode = Workflow2Frontend.getViewMode(jQuery('div#page'));
if (viewMode == 'relatedview') {
Workflow2Frontend.RelatedListHandler(jQuery('div#page'));
}
});
if (jQuery('#module', jQuery('div#page')).length > 0) {
if (jQuery('#module', jQuery('div#page')).val() == 'Campaigns' && typeof Campaigns_Detail_Js != 'undefined') {
thisInstance = Campaigns_Detail_Js.getInstance();
var detailContentsHolder = thisInstance.getContentHolder();
var detailContainer = detailContentsHolder.closest('div.detailViewInfo');
jQuery('.related', detailContainer).on('click', 'li', function (e, urlAttributes) {
window.setTimeout(function () {
var viewMode = Workflow2Frontend.getViewMode(jQuery('div#page'));
if (viewMode == 'relatedview') {
Workflow2Frontend.RelatedListHandler(jQuery('div#page'));
}
}, 1000);
});
}
}
}
}
}
RedooUtils('Workflow2').onRelatedListChange().add(function() {
var objWorkflow = new Workflow();
objWorkflow.showInlineButtons();
});
jQuery('.quickCreateModule, .addButton[data-url*="QuickCreate"]').on('click', function __check() {
if(jQuery('.quickCreateContent','.modelContainer').length == 0) {
window.setTimeout(__check, 200);
} else {
jQuery('#globalmodal form[name="QuickCreate"] .btn[type="submit"]').on('click', function() {
WorkflowExecution
});
}
});
});;jQuery('#WorkflowDesignerErrorLoaded').hide();
var WFUserIsAdmin;
window.Workflow = function () {
this.crmid = 0;
this._allowParallel = 0;
this._workflowid = null;
this._workflowTrigger = null;
this._currentExecId = null;
this.ExecutionCallback = null;
this._requestValues = {};
this._requestValuesKey = null;
this._backgroundMode = false;
this._extraEnvironment = {};
this._ListViewMode = false;
/**
*
* @param workflow WorkflowID or Trigger
* @param crmid Record to use
*/
this.execute = function(workflow, crmid, callback, ignoreViewMode) {
if(typeof ignoreViewMode === 'undefined') ignoreViewMode = false;
this.crmid = crmid;
if(FlexUtils('Workflow2').getViewMode() == 'listview' && crmid == 0 && ignoreViewMode === false) {
runListViewWorkflow(workflow);
} else {
if (jQuery.isNumeric(workflow)) {
this._executeById(workflow, callback);
} else {
this._executeByTrigger(workflow, callback);
}
}
};
this.setListView = function(value) {
this._ListViewMode = (value == true);
};
this.checkFrontendActions = function(step, crmid) {
WorkflowRecordMessages = [];
if(typeof crmid == 'undefined') {
var crmid = 0;
var recordId;
if (Workflow2Frontend.getViewMode(jQuery('div#page')) == 'detailview' || Workflow2Frontend.getViewMode(jQuery('div#page')) == 'summaryview') {
recordId = $('#recordId', jQuery('div#page')).val();
} else if (Workflow2Frontend.getViewMode(jQuery('div#page')) == 'quickcreate') {
recordId = 0;
} else if (Workflow2Frontend.getViewMode(jQuery('div#page')) == 'editview') {
recordId = jQuery('[name="record"]').val();
} else if (Workflow2Frontend.getViewMode(jQuery('div#page')) == 'listview') {
recordId = 0;
} else if (Workflow2Frontend.getViewMode(jQuery('div#page')) == 'relatedview') {
recordId = 0;
} else if (Workflow2Frontend.getViewMode(jQuery('div#page')) == 'composemail') {
var ids = jQuery('[name="selected_ids"]').val();
recordId = jQuery.parseJSON(ids)[0];
} else {
recordId = 0;
}
} else {
recordId = Number(crmid);
}
if(recordId == 0 || typeof recordId == 'undefined') {
if( $('#recordId').length > 0) {
var recordId = $('#recordId').val();
}
}
/*if(typeof recordId == "undefined" || recordId == 0) {
return;
}*/
if(typeof _META != 'undefined') {
var moduleName = _META.module;
} else {
var moduleName = RedooUtils('Workflow2').getMainModule('div#page');
}
RedooAjax('Workflow2').postAction('CheckFrontendActions', {'crmid':recordId, 'step':step, src_module: moduleName}, 'json').then(jQuery.proxy(function(response) {
if(response.length == 0) return;
if(typeof response.buttons != 'undefined' && response.buttons.length > 0) {
this.generateInlineButtons(response.buttons);
}
if(typeof response.detailviewtop != 'undefined' && response.detailviewtop.length > 0) {
this.generateDetailViewTopButtons(response.detailviewtop);
}
if(typeof response['btn-list'] == 'object') {
this.generateBtnTrigger(response['btn-list']);
}
if(jQuery('.wfdGeneralButton').length == 0) {
if(typeof _META != 'undefined') {
var moduleName = _META.module;
} else {
var moduleName = RedooUtils('Workflow2').getMainModule(parentEle);
}
var recordId = jQuery('[name="record_id"]').val();
if(response.show_general_button != false) {
if(jQuery('.detailview-header-block').length > 0) {
var TopButton = '<button class="btn btn-default wfdGeneralButton" data-view="detailview" data-module="' + moduleName + '" data-crmid="' + recordId + '" style="margin-right:5px;font-weight:bold;"><i class="fa fa-location-arrow"></i> ' + response.labels.start_process + '</button>';
jQuery('.detailViewButtoncontainer .btn-toolbar .btn-group:first-of-type').prepend('' + TopButton + '');
} else if(jQuery('#appnav .nav ').length > 0){
var TopButton = '<button class="btn btn-default wfdGeneralButton module-buttons" data-view="detailview" data-module="' + moduleName + '" data-crmid="' + recordId + '" style="font-weight:bold;"><i class="fa fa-location-arrow"></i> ' + response.labels.start_process + '</button>';
jQuery('#appnav .nav ').prepend('<li style="padding-right:20px;">' + TopButton + '</li>');
} else {
//resposnvie
var TopButton = '<button style="margin-right:20px;" class="btn btn-default wfdGeneralButton module-buttons" data-view="detailview" data-module="' + moduleName + '" data-crmid="' + recordId + '" style="font-weight:bold;"><i class="fa fa-location-arrow"></i> ' + response.labels.start_process + '</button>';
jQuery('div#appnav').find('div.btn-group').prepend(TopButton);
}
/*if (jQuery('.WFDetailViewGroupTop').length > 0) {
jQuery('.WFDetailViewGroupTop').prepend(TopButton);
} else {
jQuery('.detailViewButtoncontainer .btn-toolbar ').prepend('<div class="btn-group WFDetailViewGroupTop">' + TopButton + '</div>');
}*/
jQuery('.wfdGeneralButton').on('click', function (e) {
var module = jQuery(e.currentTarget).data('module');
var crmid = jQuery(e.currentTarget).data('crmid');
var view = jQuery(e.currentTarget).data('view');
Workflow2Frontend.showWorkflowPopup(module, crmid, view);
});
}
}
WFUserIsAdmin = response.is_admin == true ? true : false;
jQuery.each(response.actions, function(index, value) {
switch(value.type) {
case 'redirect':
if(value.configuration.url == '_internal_reload') {
window.location.reload();
return false;
}
if(value.configuration.target == "same") {
window.location.href = value.configuration.url;
return false;
} else {
window.open(value.configuration.url);
return;
}
break;
case 'confirmation':
if(jQuery('.confirmation_container').length == 0) {
var html = '<div class="confirmation_container row block" style="background-color:#ffffff;padding-top:10px;margin-top:10px;"></div>';
jQuery('div.details').before(html);
}
var config = value.configuration;
var bgColor = config.backgroundcolor;
//if(bgColor == '') {
bgColor = '#ffffff';
//}
/*
if(config.border != '') {
var borderCSS = 'border:2px solid ' + config.border + ';border-top:0;';
} else {
var borderCSS = '';
}*/
var borderCSS = '';
var html = '<div class="row" style="line-height:24px;' + borderCSS +'background-color:' + bgColor + ';">';
html += '<div style="font-weight:bold;margin-bottom:10px;line-height:24px;" class="col-lg-6">' + config.infomessage + ' <div style="font-size:10px;color:#5e5e55;line-height:10px;">' + config.text_eingestellt +': ' + config.first_name + ' ' + config.last_name + ' / ' + config.timestamp + '</div></div>';
html += '<div style="font-weight:bold;margin-bottom:10px;line-height:34px;" class="col-lg-6">';
if(config.buttons.btn_accept != '') {
html += '<a onclick="return WorkflowPermissions.submit(\'' + config.execid +'##' + config.blockid + '\', \'' + config.conf_id + '\', \''+ config.hash1 + ' \', \'ok\');" class="btn btn-success decision decision_ok" style="margin-right:5px;min-width:100px;" href="index.php?module=Workflow2&view=List&aid=' + config.conf_id + '&a=ok&h=' + config.hash1 + '">' + config.buttons.btn_accept + '</a>';
}
if(value.configuration.buttons.btn_rework != '') {
html += '<a onclick="return WorkflowPermissions.submit(\'' + config.execid +'##' + config.blockid + '\', \'' + config.conf_id + '\', \''+ config.hash2 + ' \', \'rework\');" class="btn btn-warning decision decision_rework" style="margin-right:5px;min-width:100px;" href="index.php?module=Workflow2&view=List&aid=' + config.conf_id + '&a=rework&h=' + config.hash1 + '">' + config.buttons.btn_rework + '</a>';
}
if(value.configuration.buttons.btn_decline != '') {
html += '<a onclick="return WorkflowPermissions.submit(\'' + config.execid +'##' + config.blockid + '\', \'' + config.conf_id + '\', \''+ config.hash3 + ' \', \'decline\');" class="btn btn-danger decision decision_decline" style="margin-right:5px;min-width:100px;" href="index.php?module=Workflow2&view=List&aid=' + config.conf_id + '&a=decline&h=' + config.hash1 + '">' + config.buttons.btn_decline + '</a>';
}
jQuery('.confirmation_container').append(html);
jQuery('.confirmation_container').slideDown();
break;
case 'requestValues':
continueWorkflow(value.configuration.execid, value.configuration.crmid, value.configuration.blockid);
return false;
break;
case 'message':
WorkflowRecordMessages.push(value.configuration);
break;
}
});
this.parseMessages();
}, this));
};
this.generateBtnTrigger = function(buttons) {
jQuery('.wfdButtonHeaderbutton').remove();
if(typeof buttons.headerbtn != 'undefined') {
var html = '';
jQuery.each(buttons.headerbtn, $.proxy(function(index, value) {
var rand = Math.floor(Math.random() * 9999999) + 1000000;
if(value.color != '') {
var cssStyle = 'color:' + value.textcolor + ';background-color: ' + value.color + ';background-image:none;';
} else {
var cssStyle = ''
}
html += '<li><button type="button" data-id="' + value.workflow_id + '" class="btn btn-default module-buttons wfdButtonHeaderbutton" style="' + cssStyle + '">' + value.label + '</button></li>';
}, this));
jQuery('#appnav .nav ').prepend('' + html + '');
jQuery('.wfdButtonHeaderbutton').on('click', function(e) {
var target = jQuery(e.currentTarget);
var workflowObj = new Workflow();
if(FlexUtils('Workflow2').getViewMode() == 'listview') {
workflowObj.execute(target.data('id'), 0);
} else {
workflowObj.execute(target.data('id'), RedooUtils('Workflow2').getRecordIds()[0]);
}
});
}
};
this.generateDetailViewTopButtons = function(buttons) {
jQuery('.WFDetailViewGroupTop').remove();
var html = '';
jQuery.each(buttons, function(index, value) {
var rand = Math.floor(Math.random() * 9999999) + 1000000;
if(value.color != '') {
var cssStyle = 'color:' + value.textcolor + ';background-color: ' + value.color + ';background-image:none;';
} else {
var cssStyle = ''
}
html += '<button data-id="' + value.workflow_id + '" class="btn btn-default wfdButtonTopbutton" style="' + cssStyle + '">' + value.label + '</button>';
});
jQuery('.detailViewButtoncontainer .btn-toolbar ').prepend('<div class="btn-group WFDetailViewGroupTop">' + html + '</div>');
jQuery('.wfdButtonTopbutton').on('click', function() {
var workflow = new Workflow();
workflow.execute(jQuery(this).data('id'), jQuery('#recordId').val());
});
};
this.generateInlineButtons = function(buttons) {
var final = {};
jQuery.each(buttons, jQuery.proxy(function (index, button) {
jQuery.each(button.config.field, jQuery.proxy(function (fieldIndex, fieldName) {
if (typeof final[fieldName] == 'undefined') {
final[fieldName] = {
config: button.config,
buttons: []
};
}
final[fieldName]['buttons'].push(button);
}, this));
//
}, this));
RedooCache('Workflow2').set('currentInlineButtons', final);
this.showInlineButtons();
};
this.showInlineButtons = function() {
jQuery('.WFInlineButton').remove();
jQuery('.WFDInlineDropdown').remove();
jQuery.each(RedooCache('Workflow2').get('currentInlineButtons', []), jQuery.proxy(function(fieldName, fields) {
var field = RedooUtils('Workflow2').getFieldElement(fieldName);
if(field != false) {
var dropdownHTML = '';
var buttonHTML = '';
jQuery.each(fields['buttons'], jQuery.proxy(function (index, button) {
if(typeof button.config.dropdown == 'undefined' || button.config.dropdown == '0') {
// Buttons shouldn't arranged as DropDown
var existingButtons = jQuery('.WFInlineButton[data-wfid="' + button.workflow_id + '"][data-frontendid="' + button.frontend_id + '"][data-fieldname="' + fieldName + '"]');
if (existingButtons.length > 0) {
jQuery(existingButtons).show().removeClass('tmpbtn');
} else {
buttonHTML = '<button type="button" data-wfid="' + button.workflow_id + '" data-frontendid="' + button.frontend_id + '" data-fieldname="' + fieldName + '" class="WFInlineButton btn pull-right" style="height:20px;line-height:16px;font-size:10px; padding:1px 10px; background-color:' + button.color + ';color:' + button.textcolor + ';margin-left:5px;">' + button.label + '</button>';
}
} else {
// Buttons shouldn't arranged as DropDown
//jQuery.each(fields['buttons'], jQuery.proxy(function (index, button) {
dropdownHTML += '<li style=" background-color:' + button.color + ';color:' + button.textcolor + ';" class="dropdown-submenu"><a data-wfid="' + button.workflow_id + '" data-frontendid="' + button.frontend_id + '" data-fieldname="' + fieldName + '" href="#" style="color:' + button.textcolor + ';">' + button.label + '</a></li>';
//}, this));
}
}, this));
jQuery('.WFDInlineDropdown', field).remove();
if(RedooUtils('Workflow2').getViewMode() == 'detailview') {
if(dropdownHTML != '') {
var finalHTML = '<div class="btn-group pull-right WFDInlineDropdown" style="margin-left:5px;"><a class="btn dropdown-toggle" data-toggle="dropdown" href="#" style="height:20px;color:#666666;border:1px solid #666666;line-height:16px;font-size:10px; padding:1px 5px;"><span class="caret"></span></a><ul class="dropdown-menu">' + dropdownHTML + '</ul></div>';
field.append(finalHTML);
}
if(buttonHTML != '') {
field.append(buttonHTML);
}
} else if(RedooUtils('Workflow2').getViewMode() == 'summaryview') {
if(dropdownHTML != '') {
var finalHTML = '<div class="btn-group pull-right WFDInlineDropdown" style="margin-left:5px;"><a class="btn dropdown-toggle" data-toggle="dropdown" href="#" style="font-size:10px; padding:1px 5px;"><span class="caret"></span></a><ul class="dropdown-menu">' + dropdownHTML + '</ul></div>';
field.append(finalHTML);
}
console.log(buttonHTML, field);
if(buttonHTML != '') {
field.append(buttonHTML);
}
}
}
}, this));
jQuery('.WFInlineButton.tmpbtn').hide();
jQuery('.WFInlineButton, .WFDInlineDropdown li a').off('click').on('click', function(e) {
e.stopPropagation();
var wfId = jQuery(e.currentTarget).data('wfid');
var workflow = new Workflow();
workflow.execute(wfId, RedooUtils('Workflow2').getRecordIds()[0], function() {});
});
jQuery("div.WFDInlineDropdown").on('click', function(e) {
e.stopPropagation();
jQuery(".dropdown-toggle", e.currentTarget).dropdown('toggle');
});
};
this.setBackgroundMode = function(value) {
this._backgroundMode = value;
};
this.setRequestedData = function(values, relatedKey) {
this._requestValues = values;
this._requestValuesKey = relatedKey;
};
this.allowParallel = function(value) {
this._allowParallel = value?1:0;
};
this.addExtraEnvironment = function(key, value) {
this._extraEnvironment[key] = value;
};
this._executeByTrigger = function(triggerName, ExecutionCallback) {
var Execution = new WorkflowExecution();
Execution.init(this.crmid);
Execution.setRequestedData(this._requestValues, this._requestValuesKey);
if(this._allowParallel == 1) {
Execution.allowParallel();
}
Execution.enableRedirection(ENABLEredirectionOrReloadAfterFinish);
if(typeof ExecutionCallback != 'undefined') {
this._workflowTrigger = triggerName;
}
if(typeof ExecutionCallback != 'undefined') {
Execution.setCallback(ExecutionCallback);
}
jQuery.each(this._extraEnvironment, function(index, value) {
Execution.addEnvironment(index, value);
});
Execution.setBackgroundMode(this._backgroundMode);
Execution.setWorkflowByTrigger(triggerName);
Execution.execute();
};
this._executeById = function(workflow_id, ExecutionCallback) {
var Execution = new WorkflowExecution();
Execution.init(this.crmid);
Execution.setRequestedData(this._requestValues, this._requestValuesKey);
if(this._allowParallel == 1) {
Execution.allowParallel();
}
Execution.enableRedirection(ENABLEredirectionOrReloadAfterFinish);
if(typeof ExecutionCallback != 'undefined') {
this._workflowid = workflow_id;
}
if(typeof ExecutionCallback != 'undefined') {
Execution.setCallback(ExecutionCallback);
}
jQuery.each(this._extraEnvironment, function(index, value) {
Execution.addEnvironment(index, value);
});
Execution.setListViewMode(this._ListViewMode);
Execution.setBackgroundMode(this._backgroundMode);
Execution.setWorkflowById(workflow_id);
Execution.execute();
}; /** ExecuteById **/
this._submitStartfields = function(fields, urlStr) {
app.hideModalWindow();
RedooUtils('Workflow2').blockUI({
'message' : 'Workflow is executing',
// disable if you want key and mouse events to be enable for content that is blocked (fix for select2 search box)
bindEvents: false,
//Fix for overlay opacity issue in FF/Linux
applyPlatformOpacityRules : false
});
jQuery.post("index.php", {
"module" : "Workflow2",
"action" : "Execute",
"file" : "ajaxExecuteWorkflow",
"crmid" : this.crmid,
"workflow" : this._workflowid,
allow_parallel: this._allowParallel,
"startfields": fields
},
jQuery.proxy(function(response) {
RedooUtils('Workflow2').unblockUI();
try {
response = jQuery.parseJSON(response);
} catch (e) {
console.log(response);
return;
}
if(response["result"] == "ok") {
if(ENABLEredirectionOrReloadAfterFinish) {
window.location.reload();
}
} else {
console.log(response);
}
}, this)
);
}
this.closeForceNotification = function(messageId) {
jQuery.post('index.php?module=Workflow2&action=MessageClose', { messageId:messageId, force: 1 });
}
this.parseMessages = function() {
if(typeof WorkflowRecordMessages != 'object' || WorkflowRecordMessages.length == 0) {
return;
}
RedooUtils('Workflow2').loadScript('modules/Workflow2/views/resources/js/noty/jquery.noty.packaged.min.js').then(jQuery.proxy(function()
{
jQuery.each(WorkflowRecordMessages, function(index, value) {
if(typeof WFDvisibleMessages['workflowMessage' + value['id']] != 'undefined' && WFDvisibleMessages['workflowMessage' + value['id']] == true) {
return;
}
var type = 'alert';
switch(value.type) {
case 'success':
type = 'success';
break;
case 'info':
type = 'alert';
break;
case 'error':
type = 'error';
break;
}
value.message = '<strong>' + value.subject + "</strong><br/>" + value.message;
if(value.show_until != '') {
value.message += '<br/><span style="font-size:10px;font-style: italic;">' +value.show_until + '</span>';
}
if(WFUserIsAdmin == true) {
value.message += '&nbsp;&nbsp;<a href="#" style="font-size:10px;font-style: italic;" onclick="closeForceNotification(' + value.id + ');">(Remove Message)</a>';
}
WFDvisibleMessages['workflowMessage' + value['id']] = true;
if(value.position != -1) {
noty({
text: value.message,
id: 'workflowMessage' + value['id'],
type: value.type,
timeout: false,
'layout': value.position,
'messageId': value.id,
callback: {
"afterClose": function () {
WFDvisibleMessages['workflowMessage' + this.options.messageId] = false;
jQuery.post('index.php?module=Workflow2&action=MessageClose', {messageId: this.options.messageId});
}
}
});
}
});
}), this);
}
this.loadCachedScript = function( url, options ) {
// Allow user to set any option except for dataType, cache, and url
options = jQuery.extend( options || {}, {
dataType: "script",
cache: true,
url: url
});
// Use $.ajax() since it is more flexible than $.getScript
// Return the jqXHR object so we can chain callbacks
return jQuery.ajax( options );
};
}
;var WorkflowRunning = false;
var Workflow2Frontend = {
viewMode:false,
runCampaignRealationWF:function(workflow_id) {
runListViewWorkflow(workflow_id);
},
showWorkflowPopup:function(MainModule, RecordIds, MainView) {
//var MainView = RedooUtils('Workflow2').getViewMode(parentEle);
// var RecordIds = RedooUtils('Workflow2').getRecordIds(parentEle);
RedooAjax('Workflow2').postView('WorkflowPopup', {
'target_module': MainModule,
'target_view': MainView,
'target_record': RecordIds
}).then(function(response) {
RedooUtils('Workflow2').showModalBox(response).then(function(data) {
jQuery('[type="submit"]', data).on('click', function(e) {
if(jQuery('#workflow2_workflowid').val() == '' || jQuery('#workflow2_workflowid').val() == null) {
e.preventDefault();
e.stopPropagation();
return false;
}
RedooUtils('Workflow2').hideModalBox();
var crmid = jQuery('.WorkflowPopupCRMID', data).val();
var workflow = new Workflow();
workflow.execute(jQuery('#workflow2_workflowid').val() , crmid);
});
});
});
},
TopbuttonHandler:function(parentEle) {
var MainModule = RedooUtils('Workflow2').getMainModule(parentEle);
var CurrentViewMode = FlexUtils('Workflow2').getViewMode();
if (
typeof WFDFrontendConfig !== 'undefined' &&
typeof WFDFrontendConfig['morebtn'] !== 'undefined' &&
typeof WFDFrontendConfig['morebtn'][MainModule] !== 'undefined'
) {
if(jQuery('.detailViewButtoncontainer ul.dropdown-menu').hasClass('WFDAddHandler') === false) {
var html = '';
jQuery.each(WFDFrontendConfig['morebtn'][MainModule], function(index, value) {
var rand = Math.floor(Math.random() * 9999999) + 1000000;
html += '<li data-id="' + value.workflowid + '" class="wfdButtonMoreBtn" style="' + (value.color != '' ? 'color:' + value.textcolor + ';background-color: ' + value.color + ';':'') + '"><a href="#" style="' + (value.color != '' ? 'color:' + value.textcolor + ';':'') + '">' + value.label + '</a></li>';
});
jQuery('.detailViewButtoncontainer ul.dropdown-menu').addClass('WFDAddHandler');
jQuery('.detailViewButtoncontainer ul.dropdown-menu').append(html);
jQuery('.wfdButtonMoreBtn a').on('click', function(e) {
e.preventDefault();
return false;
});
jQuery('.wfdButtonMoreBtn').on('click', function() {
var workflow = new Workflow();
workflow.execute(jQuery(this).data('id'), jQuery('#recordId').val());
});
}
}
if (
CurrentViewMode == 'listview' &&
typeof WFDFrontendConfig !== 'undefined' &&
typeof WFDFrontendConfig['listviewbtn'] !== 'undefined' &&
typeof WFDFrontendConfig['listviewbtn'][MainModule] !== 'undefined'
) {
if(jQuery('.detailViewButtoncontainer').hasClass('WFDAddHandler') === false) {
var html = '';
jQuery.each(WFDFrontendConfig['listviewbtn'][MainModule], function(index, value) {
var rand = Math.floor(Math.random() * 9999999) + 1000000;
if(value.color != '') {
var cssStyle = 'color:' + value.textcolor + ';background-color: ' + value.color + ';background-image:none;';
} else {
var cssStyle = ''
}
html += '<button type="button" data-id="' + value.workflowid + '" class="btn btn-default wfdButtonTopbutton" style="' + cssStyle + '">' + value.label + '</button>';
});
jQuery('.detailViewButtoncontainer').addClass('WFDAddHandler');
jQuery('.listViewActionsContainer').append(html);
jQuery('.wfdButtonTopbutton').on('click', function(e) {
e.preventDefault();
var workflow = new Workflow();
workflow.execute(jQuery(this).data('id'), 0);
});
}
}
},
RelatedListHandler:function(parentEle) {
if(typeof WFDFrontendConfig !== 'undefined' && typeof WFDFrontendConfig['relatedbtn'] !== 'undefined') {
var MainModule = Workflow2Frontend.getMainModule(parentEle);
if(typeof WFDFrontendConfig['relatedbtn'][MainModule] !== 'undefined') {
var btnHtml = '';
for(var index in WFDFrontendConfig['relatedbtn'][MainModule] ) {
if (WFDFrontendConfig['relatedbtn'][MainModule].hasOwnProperty(index) && jQuery.isNumeric(index)) {
var value = WFDFrontendConfig['relatedbtn'][MainModule][index];
btnHtml += '<button type="button" class="btn CampaignRelationBtn" onclick="Workflow2Frontend.runCampaignRealationWF(' + value['workflowid'] +');" style="background-color:' + value['color'] +';">' + value['label'] +'</button>';
}
}
var parent = jQuery(jQuery('div.relatedHeader .btn')[0]).closest('.btn-group').parent();
parent.append('<div class="btn-group">' + btnHtml + '</div>');
}
}
},
getMainModule:function (parentEle) {
var viewMode = Workflow2Frontend.getViewMode(parentEle);
if (viewMode == 'detailview' || viewMode == 'summaryview') {
return jQuery('#module', parentEle).val();
} else if (viewMode == 'editview' || viewMode == 'quickcreate') {
return jQuery('[name="module"]', parentEle).val();
} else if (viewMode == 'listview') {
return jQuery('#module', parentEle).val();
} else if (viewMode == 'relatedview') {
if (jQuery('[name="relatedModuleName"]', parentEle).length > 0) {
return jQuery('[name="relatedModuleName"]', parentEle).val();
}
if (jQuery('#module', parentEle).length > 0) {
return jQuery('#module', parentEle).val();
}
}
return '';
},
getViewMode: function(parentEle, obj) {
var viewEle = jQuery("#view", parentEle);
if(viewEle.length > 0 && viewEle[0].value == "List") {
Workflow2Frontend.viewMode = "listview";
}
if(jQuery(".detailview-table", parentEle).length > 0) {
Workflow2Frontend.viewMode = "detailview";
} else if(jQuery(".summary-table", parentEle).length > 0) {
Workflow2Frontend.viewMode = "summaryview";
} else if(jQuery(".recordEditView", parentEle).length > 0) {
if(jQuery('.quickCreateContent', parentEle).length == 0) {
Workflow2Frontend.viewMode = "editview";
} else {
Workflow2Frontend.viewMode = "quickcreate";
}
}
if(jQuery('.relatedContents', parentEle).length > 0) {
Workflow2Frontend.viewMode = "relatedview";
if(jQuery('td[data-field-type]', parentEle).length > 0) {
Workflow2Frontend.popUp = false;
} else {
Workflow2Frontend.popUp = true;
}
}
if(Workflow2Frontend.viewMode === false) {
if(jQuery('#view', parentEle).length > 0) {
if(jQuery('#view', parentEle).val() == 'Detail') {
Workflow2Frontend.viewMode = 'detailview';
}
}
}
return Workflow2Frontend.viewMode;
}
};;window.WorkflowExecution = function() {
this._crmid = null;
this._execId = null;
this._workflowId = null;
this._workflowTrigger = null;
this._execId = null;
this._blockID = null;
this._requestValues = {};
this._requestValuesKey = null;
this._callback = null;
this._allowParallel = false;
this._allowRedirection = true;
this._backgroundMode = false;
this._extraEnvironment = {};
this._ListViewMode = false;
this._FrontendType = undefined;
this.setFrontendType = function(type) {
this._FrontendType = type;
};
this.setEnvironment = function(envVars) {
this._extraEnvironment = envVars;
};
this.addEnvironment = function(key, value) {
this._extraEnvironment[key] = value;
};
this.setRequestedData = function(values, relatedKey) {
this._requestValues = values;
this._requestValuesKey = relatedKey;
};
this.allowParallel = function() {
this._allowParallel = true;
};
this.init = function(crmid) {
this._crmid = crmid;
};
this.setWorkflowByTrigger = function(triggerName) {
this._workflowTrigger = triggerName;
this._workflowId = undefined;
};
this.setWorkflowById = function(workflow_id) {
this._workflowId = workflow_id;
this._workflowTrigger = undefined;
};
this.setBackgroundMode = function(value) {
this._backgroundMode = value;
};
this.setCallback = function(callback) {
this._callback = callback;
};
this.setListViewMode = function(listView) {
this._ListViewMode = listView == true;
};
this.enableRedirection = function(value) {
this._allowRedirection = value ? true : false;
};
this._handleDownloads = function(response) {
var html = '<p>' + response.download_text + '</p>';
html += '<ul style="list-style:none;">';
$.each(response.downloads, function(index, data) {
html += '<li style="margin-bottom:5px;"><a href="' + data.url + '" target="_blank"><i class="fa fa-download" style="margin-right:10px;" aria-hidden="true"></i> <strong>' + data.filename + '</strong></a></li>';
});
html += '</ul>';
bootbox.dialog({
message:html,
closeButton:true,
buttons: {
ok: {
label: 'Ok',
className: 'btn-success'
}
}
});
};
this._handleRedirection = function(response) {
if(this._allowRedirection === true) {
if(response["redirection_target"] == "same") {
window.location.href = response["redirection"];
return true;
} else {
window.open(response["redirection"]);
return true;
}
}
return false;
};
this.setContinue = function(execID, blockID) {
this._execId = execID;
this._blockID = blockID;
};
this.executeWithForm = function(form) {
if(typeof jQuery(form).ajaxSubmit == 'undefined') {
console.error('jquery.forms plugin requuired!');
return;
}
WorkflowRunning = true;
RedooUtils('Workflow2').blockUI({ message: '<h4 style="padding:5px 0;"><img src="modules/Workflow2/icons/sending.gif" style="margin-bottom:20px;" /><br/>Please wait ...</h4>' });
jQuery(form).ajaxSubmit({
'url' : "index.php",
'type': 'post',
data: {
"module" : "Workflow2",
"action" : "ExecuteNew",
'crmid' : this._crmid,
'workflowID' : this._workflowId === null ? undefined : this._workflowId,
'allowParallel': this._allowParallel ? 1 : 0,
'continueExecId': this._execId === null ? undefined : this._execId,
'continueBlockId': this._blockID === null ? undefined : this._blockID,
'requestValues': this._requestValues === null ? undefined : this._requestValues,
'requestValuesKey': this._requestValuesKey === null ? undefined : this._requestValuesKey,
'extraEnvironment': this._extraEnvironment,
'listviewmode': this._ListViewMode ? 1 : 0
},
success:jQuery.proxy(this.executionResponse, this),
error:jQuery.proxy(this.executionResponse, this)
});
};
this.frontendWorkflows = function(workflowIDs, record) {
var dfd = jQuery.Deferred();
RedooAjax('Workflow2').post('index.php', {
'module': 'Workflow2',
'action': 'FrontendWorkflowExec',
'workflow_ids': workflowIDs,
'record': record,
'dataType': 'json'
}).then($.proxy(function(data) {
//this.executionResponse(data);
dfd.resolve( data );
}, this));
return dfd.promise();
};
this.execute = function() {
if(this._backgroundMode === false) {
RedooUtils('Workflow2').blockUI({message: '<h4 style="padding:5px 0;"><img src="modules/Workflow2/icons/sending.gif" style="margin-bottom:20px;"/><br/>Please wait ...</h4>'});
}
WorkflowRunning = true;
jQuery.post("index.php", {
"module" : "Workflow2",
"action" : "ExecuteNew",
//XDEBUG_PROFILE:1,
'frontendtype': this._FrontendType,
'crmid' : this._crmid,
'workflowID' : this._workflowId === null ? undefined : this._workflowId,
'triggerName' : this._workflowTrigger === null ? undefined : this._workflowTrigger,
'allowParallel': this._allowParallel ? 1 : 0,
'continueExecId': this._execId === null ? undefined : this._execId,
'continueBlockId': this._blockID === null ? undefined : this._blockID,
'requestValues': this._requestValues === null ? undefined : this._requestValues,
'requestValuesKey': this._requestValuesKey === null ? undefined : this._requestValuesKey,
'extraEnvironment': this._extraEnvironment,
'listviewmode': this._ListViewMode ? 1 : 0
}
).always(jQuery.proxy(this.executionResponse, this));
};
this.executionResponse = function(responseTMP) {
if(typeof responseTMP == 'object' && typeof responseTMP.responseText != 'undefined') {
responseTMP = responseTMP.responseText;
}
if(responseTMP.indexOf('Invalid request') !== -1) {
alert('You did not do any action in VtigerCRM since a long time. The page needs to be reloaded, before you could use the Workflow Designer.');
window.location.reload();
return;
}
if(this._backgroundMode === false) {
RedooUtils('Workflow2').unblockUI();
}
WorkflowRunning = false;
var response;
try {
response = jQuery.parseJSON(responseTMP);
} catch(exp) {
console.log(exp);
console.log(responseTMP);
return;
}
if(response !== null && response["result"] == "ready") {
if(typeof this._callback == 'function') {
var retVal = this._callback.call(this, response);
if(typeof retVal != 'undefined' && retVal === false) {
return;
}
}
if(typeof response["redirection"] != "undefined" && typeof response["downloads"] != "undefined") {
this._handleDownloads(response);
this._handleRedirection(response);
return;
} else if(typeof response["redirection"] != "undefined") {
this._handleRedirection(response);
return;
} else if(typeof response["downloads"] != "undefined") {
this._handleDownloads(response);
return;
}
if(this._allowRedirection === true && this._backgroundMode === false && typeof response["prevent_reload"] === 'undefined') {
window.location.reload();
}
} else if(response !== null && response["result"] == "asktocontinue") {
jQuery('body').append('<style type="text/css">.bootbox.modal {z-index: 9999 !important;}</style>');
bootbox.confirm({
message: response['question'],
buttons: {
confirm: {
label: response['LBL_YES'],
className: 'btn-success'
},
cancel: {
label: response['LBL_NO'],
className: 'btn-danger'
}
},
callback: function (result) {
if(result === true) {
FlexUtils('Workflow2').hideModalBox();
var Execution = new WorkflowExecution();
Execution.setContinue(response['execid'], response['blockid']);
Execution.execute();
}
}
});
} else if(response !== null && response["result"] == "requestForm") {
this._requestValuesKey = response['fields_key'];
this._execId = response['execId'];
if(typeof RequestValuesForm2 == 'undefined') {
jQuery.getScript('modules/Workflow2/views/resources/js/RequestValuesForm2.js', jQuery.proxy(function() {
var requestForm = new RequestValuesForm2(response['fields_key'], response);
requestForm.setCallback(jQuery.proxy(this.submitRequestFields, this));
requestForm.show(response.html, response.script);
//response, this._requestValuesKey, response['request_message'], , response['stoppable'], response['pausable'], response['options']);
}, this));
} else {
var requestForm = new RequestValuesForm2(response['fields_key'], response);
requestForm.setCallback(jQuery.proxy(this.submitRequestFields, this));
requestForm.show(response.html, response.script);
}
} else if(response !== null && response["result"] == "reqvalues") {
this._requestValuesKey = response['fields_key'];
this._execId = response['execId'];
if(typeof RequestValuesForm == 'undefined') {
jQuery.getScript('modules/Workflow2/views/resources/js/RequestValuesForm.js', jQuery.proxy(function() {
var requestForm = new RequestValuesForm();
requestForm.show(response, this._requestValuesKey, response['request_message'], jQuery.proxy(this.submitRequestFields, this), response['stoppable'], response['pausable'], response['options']);
}, this));
} else {
var requestForm = new RequestValuesForm();
requestForm.show(response, this._requestValuesKey, response['request_message'], jQuery.proxy(this.submitRequestFields, this), response['stoppable'], response['pausable'], response['options']);
}
} else if(response !== null && response["result"] == "error") {
console.log('Errorcode: ' + response.errorcode);
app.showModalWindow('<div style="padding:10px 50px;text-align:center;">' + response.message + '</div>');
} else {
console.log(response);
}
};
this.submitRequestFields = function(key, values, value2, form) {
this._requestValues = {};
this._requestValuesKey = key;
var html = '';
jQuery.each(values, jQuery.proxy(function(index, value) {
if(value.name.substr(-2) != '[]') {
this._requestValues[value.name] = value.value;
} else {
var varName = value.name.substr(0, value.name.length - 2);
if(typeof this._requestValues[varName] === 'undefined') {
this._requestValues[varName] = [];
}
this._requestValues[varName].push(value.value);
}
}, this));
if(jQuery('[type="file"]', form).length > 0) {
var html = '<form action="#" method="POST" onsubmit="return false;">';
jQuery('input, select, button', form).attr('disabled', 'disabled');
jQuery('[type="file"]', form).removeAttr('disabled').each(jQuery.proxy(function(index, ele) {
var name = jQuery(ele).attr('name');
jQuery(ele).attr('name', 'fileUpload[' + name + ']');
this._requestValues[name] = jQuery(ele).data('filestoreid');
}, this));
html += '</form>';
this.executeWithForm(form);
return;
}
this.execute();
}
};
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZyb250ZW5kLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJmcm9udGVuZC5qcyIsInNvdXJjZXNDb250ZW50IjpbXX0=
}())
/** HANDLER START **/
var WFDFrontendConfig = [];
var WFDLanguage = {"These Workflow requests some values":"These Workflow requests some values","Execute Workflow":"Execute Workflow","enter values later":"enter values later","stop Workflow":"stop Workflow","Executing Workflow ...":"Executing Workflow ..."};
/* Render take 0.01s */
/** MODULELANGUAGESTRINGS START **/
if(typeof FLEXMODLANGUAGE == "undefined") var FLEXMODLANGUAGE = {};
if(typeof FLEXLANG == "undefined") var FLEXLANG = function(key, module) { var lang = app.getUserLanguage(); if(typeof FLEXMODLANGUAGE[module] != "undefined" && typeof FLEXMODLANGUAGE[module][lang] != "undefined" && typeof FLEXMODLANGUAGE[module][lang][key] != "undefined") { return FLEXMODLANGUAGE[module][lang][key]; } return key; };
FLEXMODLANGUAGE["Workflow2"] = {"en_us":{"LBL_GET_KNOWN_ENVVARS":"Recognized environment variables","LBL_DUPLICATE_BLOCK":"duplicate Block","LBL_DELETE_BLOCK":"remove Block","LBL_CHANGE_BLOCKCOLOR":"change color","LBL_REMOVE_BLOCKCOLOR":"remove color","HEAD_USAGE_OF_THIS_CONNECTION":"Usage of this path","LBL_DATE":"Date","TXT_CHOOSE_VALID_FIELD":"choose a field","LBL_MANAGE_SIDEBARTOOGLE":"Workflow Designer process your input","LBL_CREATE_TYPE":"create new block manually","LBL_SAVED_SUCCESSFULLY":"Successfully saved","page":"Page","select all of this type":"Select this type","LBL_PASTE_BLOCK":"paste blocks","LBL_COPY_BLOCK":"copy blocks","Reset value":"Reset value","Empty field":"Empty field","Reference Field":"Reference Field","Available fields":"Available fields","Quantity":"Quantity","Unit Price":"Unit Price","Product Description":"Description","Product":"Product","Export Blocks by Text":"Export Blocks by Text","Import Blocks by Text":"Import Blocks by Text","Expression-Errors found":"Expression-Errors found","Name of new Folder?":"Name of new Folder?","Filter Workflows":"Filter Workflows","Please wait":"Please wait","WF_DELETE_CONFIRM":"Please confirm to delete the Workflow?\n\nRunning processes will be stopped!"},"ru_ru":{"LBL_GET_KNOWN_ENVVARS":"\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f","LBL_DUPLICATE_BLOCK":"\u0414\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u043b\u043e\u043a","LBL_DELETE_BLOCK":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0431\u043b\u043e\u043a","LBL_CHANGE_BLOCKCOLOR":"\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0446\u0432\u0435\u0442","LBL_REMOVE_BLOCKCOLOR":"\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0446\u0432\u0435\u0442","HEAD_USAGE_OF_THIS_CONNECTION":"\u041f\u0443\u0442\u044c","LBL_DATE":"\u0414\u0430\u0442\u0430","TXT_CHOOSE_VALID_FIELD":"\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u043e\u043b\u0435","LBL_MANAGE_SIDEBARTOOGLE":"\u041a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0432\u0430\u0448\u0438 \u0434\u0430\u043d\u043d\u044b\u0435","LBL_CREATE_TYPE":"\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0431\u043b\u043e\u043a \u0432\u0440\u0443\u0447\u043d\u0443\u044e","LBL_SAVED_SUCCESSFULLY":"\u0423\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043e","page":"\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430","select all of this type":"\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435 \u044d\u0442\u043e\u0433\u043e \u0442\u0438\u043f\u0430","LBL_PASTE_BLOCK":"\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0431\u043b\u043e\u043a\u0438","LBL_COPY_BLOCK":"\u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0431\u043b\u043e\u043a\u0438","Reset value":"\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435","Empty field":"\u041f\u0443\u0441\u0442\u043e\u0435 \u043f\u043e\u043b\u0435","Reference Field":"\u0418\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u043f\u043e\u043b\u0435","Available fields":"\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043f\u043e\u043b\u044f","Quantity":"\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e","Unit Price":"\u0426\u0435\u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0446\u044b","Product Description":"\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435","Product":"\u0422\u043e\u0432\u0430\u0440","Export Blocks by Text":"\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0417\u0430\u0434\u0430\u0447\u0438 \u0432 \u0442\u0435\u043a\u0441\u0442","Import Blocks by Text":"\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0438 \u0438\u0437 \u0442\u0435\u043a\u0441\u0442\u0430","Expression-Errors found":"\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u044b \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u0412\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f\u0445","Name of new Folder?":"\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0439 \u043f\u0430\u043f\u043a\u0438","Filter Workflows":"\u0424\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c \u0411\u0438\u0437\u043d\u0435\u0441-\u041f\u0440\u043e\u0446\u0435\u0441\u0441\u044b","Please wait":"Please wait","WF_DELETE_CONFIRM":"\u0412\u044b \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441?\n\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f, \u0432\u0441\u0435 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0435 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u044b \u044d\u0442\u043e\u0433\u043e \u0431\u0438\u0437\u043d\u0435\u0441-\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0431\u0443\u0434\u0443\u0442 \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b."}};
/** MODULELANGUAGESTRINGS END **/