FreeDatas2HTML/public/JS/firstExample.app.js

1142 lines
155 KiB
JavaScript
Raw Normal View History

/******/ (() => { // webpackBootstrap
/******/ var __webpack_modules__ = ({
/***/ "./node_modules/natural-orderby/esm/natural-orderby.js":
/*!*************************************************************!*\
!*** ./node_modules/natural-orderby/esm/natural-orderby.js ***!
\*************************************************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "orderBy": () => (/* binding */ orderBy),
/* harmony export */ "compare": () => (/* binding */ compare)
/* harmony export */ });
var compareNumbers = function compareNumbers(numberA, numberB) {
if (numberA < numberB) {
return -1;
}
if (numberA > numberB) {
return 1;
}
return 0;
};
var RE_NUMBERS = /(^0x[\da-fA-F]+$|^([+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?(?!\.\d+)(?=\D|\s|$))|\d+)/g;
var RE_LEADING_OR_TRAILING_WHITESPACES = /^\s+|\s+$/g; // trim pre-post whitespace
var RE_WHITESPACES = /\s+/g; // normalize all whitespace to single ' ' character
var RE_INT_OR_FLOAT = /^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?$/; // identify integers and floats
var RE_DATE = /(^([\w ]+,?[\w ]+)?[\w ]+,?[\w ]+\d+:\d+(:\d+)?[\w ]?|^\d{1,4}[/-]\d{1,4}[/-]\d{1,4}|^\w+, \w+ \d+, \d{4})/; // identify date strings
var RE_LEADING_ZERO = /^0+[1-9]{1}[0-9]*$/;
var RE_UNICODE_CHARACTERS = /[^\x00-\x80]/;
var compareUnicode = function compareUnicode(stringA, stringB) {
var result = stringA.localeCompare(stringB);
return result ? result / Math.abs(result) : 0;
};
var stringCompare = function stringCompare(stringA, stringB) {
if (stringA < stringB) {
return -1;
}
if (stringA > stringB) {
return 1;
}
return 0;
};
var compareChunks = function compareChunks(chunksA, chunksB) {
var lengthA = chunksA.length;
var lengthB = chunksB.length;
var size = Math.min(lengthA, lengthB);
for (var i = 0; i < size; i++) {
var chunkA = chunksA[i];
var chunkB = chunksB[i];
if (chunkA.normalizedString !== chunkB.normalizedString) {
if (chunkA.normalizedString === '' !== (chunkB.normalizedString === '')) {
// empty strings have lowest value
return chunkA.normalizedString === '' ? -1 : 1;
}
if (chunkA.parsedNumber !== undefined && chunkB.parsedNumber !== undefined) {
// compare numbers
var result = compareNumbers(chunkA.parsedNumber, chunkB.parsedNumber);
if (result === 0) {
// compare string value, if parsed numbers are equal
// Example:
// chunkA = { parsedNumber: 1, normalizedString: "001" }
// chunkB = { parsedNumber: 1, normalizedString: "01" }
// chunkA.parsedNumber === chunkB.parsedNumber
// chunkA.normalizedString < chunkB.normalizedString
return stringCompare(chunkA.normalizedString, chunkB.normalizedString);
}
return result;
} else if (chunkA.parsedNumber !== undefined || chunkB.parsedNumber !== undefined) {
// number < string
return chunkA.parsedNumber !== undefined ? -1 : 1;
} else if (RE_UNICODE_CHARACTERS.test(chunkA.normalizedString + chunkB.normalizedString) && chunkA.normalizedString.localeCompare) {
// use locale comparison only if one of the chunks contains unicode characters
return compareUnicode(chunkA.normalizedString, chunkB.normalizedString);
} else {
// use common string comparison for performance reason
return stringCompare(chunkA.normalizedString, chunkB.normalizedString);
}
}
} // if the chunks are equal so far, the one which has more chunks is greater than the other one
if (lengthA > size || lengthB > size) {
return lengthA <= size ? -1 : 1;
}
return 0;
};
var compareOtherTypes = function compareOtherTypes(valueA, valueB) {
if (!valueA.chunks ? valueB.chunks : !valueB.chunks) {
return !valueA.chunks ? 1 : -1;
}
if (valueA.isNaN ? !valueB.isNaN : valueB.isNaN) {
return valueA.isNaN ? -1 : 1;
}
if (valueA.isSymbol ? !valueB.isSymbol : valueB.isSymbol) {
return valueA.isSymbol ? -1 : 1;
}
if (valueA.isObject ? !valueB.isObject : valueB.isObject) {
return valueA.isObject ? -1 : 1;
}
if (valueA.isArray ? !valueB.isArray : valueB.isArray) {
return valueA.isArray ? -1 : 1;
}
if (valueA.isFunction ? !valueB.isFunction : valueB.isFunction) {
return valueA.isFunction ? -1 : 1;
}
if (valueA.isNull ? !valueB.isNull : valueB.isNull) {
return valueA.isNull ? -1 : 1;
}
return 0;
};
var compareValues = function compareValues(valueA, valueB) {
if (valueA.value === valueB.value) {
return 0;
}
if (valueA.parsedNumber !== undefined && valueB.parsedNumber !== undefined) {
return compareNumbers(valueA.parsedNumber, valueB.parsedNumber);
}
if (valueA.chunks && valueB.chunks) {
return compareChunks(valueA.chunks, valueB.chunks);
}
return compareOtherTypes(valueA, valueB);
};
var compareMultiple = function compareMultiple(recordA, recordB, orders) {
var indexA = recordA.index,
valuesA = recordA.values;
var indexB = recordB.index,
valuesB = recordB.values;
var length = valuesA.length;
var ordersLength = orders.length;
for (var i = 0; i < length; i++) {
var order = i < ordersLength ? orders[i] : null;
if (order && typeof order === 'function') {
var result = order(valuesA[i].value, valuesB[i].value);
if (result) {
return result;
}
} else {
var _result = compareValues(valuesA[i], valuesB[i]);
if (_result) {
return _result * (order === 'desc' ? -1 : 1);
}
}
}
return indexA - indexB;
};
var createIdentifierFn = function createIdentifierFn(identifier) {
if (typeof identifier === 'function') {
// identifier is already a lookup function
return identifier;
}
return function (value) {
if (Array.isArray(value)) {
var index = Number(identifier);
if (Number.isInteger(index)) {
return value[index];
}
} else if (value && typeof value === 'object' && typeof identifier !== 'function') {
return value[identifier];
}
return value;
};
};
var stringify = function stringify(value) {
if (typeof value === 'boolean' || value instanceof Boolean) {
return Number(value).toString();
}
if (typeof value === 'number' || value instanceof Number) {
return value.toString();
}
if (value instanceof Date) {
return value.getTime().toString();
}
if (typeof value === 'string' || value instanceof String) {
return value.toLowerCase().replace(RE_LEADING_OR_TRAILING_WHITESPACES, '');
}
return '';
};
var parseNumber = function parseNumber(value) {
if (value.length !== 0) {
var parsedNumber = Number(value);
if (!Number.isNaN(parsedNumber)) {
return parsedNumber;
}
}
return undefined;
};
var parseDate = function parseDate(value) {
if (RE_DATE.test(value)) {
var parsedDate = Date.parse(value);
if (!Number.isNaN(parsedDate)) {
return parsedDate;
}
}
return undefined;
};
var numberify = function numberify(value) {
var parsedNumber = parseNumber(value);
if (parsedNumber !== undefined) {
return parsedNumber;
}
return parseDate(value);
};
var createChunks = function createChunks(value) {
return value.replace(RE_NUMBERS, '\0$1\0').replace(/\0$/, '').replace(/^\0/, '').split('\0');
};
var normalizeAlphaChunk = function normalizeAlphaChunk(chunk) {
return chunk.replace(RE_WHITESPACES, ' ').replace(RE_LEADING_OR_TRAILING_WHITESPACES, '');
};
var normalizeNumericChunk = function normalizeNumericChunk(chunk, index, chunks) {
if (RE_INT_OR_FLOAT.test(chunk)) {
// don´t parse a number, if there´s a preceding decimal point
// to keep significance
// e.g. 1.0020, 1.020
if (!RE_LEADING_ZERO.test(chunk) || index === 0 || chunks[index - 1] !== '.') {
return parseNumber(chunk) || 0;
}
}
return undefined;
};
var createChunkMap = function createChunkMap(chunk, index, chunks) {
return {
parsedNumber: normalizeNumericChunk(chunk, index, chunks),
normalizedString: normalizeAlphaChunk(chunk)
};
};
var createChunkMaps = function createChunkMaps(value) {
var chunksMaps = createChunks(value).map(createChunkMap);
return chunksMaps;
};
var isFunction = function isFunction(value) {
return typeof value === 'function';
};
var isNaN = function isNaN(value) {
return Number.isNaN(value) || value instanceof Number && Number.isNaN(value.valueOf());
};
var isNull = function isNull(value) {
return value === null;
};
var isObject = function isObject(value) {
return value !== null && typeof value === 'object' && !Array.isArray(value) && !(value instanceof Number) && !(value instanceof String) && !(value instanceof Boolean) && !(value instanceof Date);
};
var isSymbol = function isSymbol(value) {
return typeof value === 'symbol';
};
var isUndefined = function isUndefined(value) {
return value === undefined;
};
var getMappedValueRecord = function getMappedValueRecord(value) {
if (typeof value === 'string' || value instanceof String || (typeof value === 'number' || value instanceof Number) && !isNaN(value) || typeof value === 'boolean' || value instanceof Boolean || value instanceof Date) {
var stringValue = stringify(value);
var parsedNumber = numberify(stringValue);
var chunks = createChunkMaps(parsedNumber ? "" + parsedNumber : stringValue);
return {
parsedNumber: parsedNumber,
chunks: chunks,
value: value
};
}
return {
isArray: Array.isArray(value),
isFunction: isFunction(value),
isNaN: isNaN(value),
isNull: isNull(value),
isObject: isObject(value),
isSymbol: isSymbol(value),
isUndefined: isUndefined(value),
value: value
};
};
var getValueByIdentifier = function getValueByIdentifier(value, getValue) {
return getValue(value);
};
var getElementByIndex = function getElementByIndex(collection, index) {
return collection[index];
};
var baseOrderBy = function baseOrderBy(collection, identifiers, orders) {
var identifierFns = identifiers.length ? identifiers.map(createIdentifierFn) : [function (value) {
return value;
}]; // temporary array holds elements with position and sort-values
var mappedCollection = collection.map(function (element, index) {
var values = identifierFns.map(function (identifier) {
return getValueByIdentifier(element, identifier);
}).map(getMappedValueRecord);
return {
index: index,
values: values
};
}); // iterate over values and compare values until a != b or last value reached
mappedCollection.sort(function (recordA, recordB) {
return compareMultiple(recordA, recordB, orders);
});
return mappedCollection.map(function (element) {
return getElementByIndex(collection, element.index);
});
};
var getIdentifiers = function getIdentifiers(identifiers) {
if (!identifiers) {
return [];
}
var identifierList = !Array.isArray(identifiers) ? [identifiers] : [].concat(identifiers);
if (identifierList.some(function (identifier) {
return typeof identifier !== 'string' && typeof identifier !== 'number' && typeof identifier !== 'function';
})) {
return [];
}
return identifierList;
};
var getOrders = function getOrders(orders) {
if (!orders) {
return [];
}
var orderList = !Array.isArray(orders) ? [orders] : [].concat(orders);
if (orderList.some(function (order) {
return order !== 'asc' && order !== 'desc' && typeof order !== 'function';
})) {
return [];
}
return orderList;
};
/**
* Creates an array of elements, natural sorted by specified identifiers and
* the corresponding sort orders. This method implements a stable sort
* algorithm, which means the original sort order of equal elements is
* preserved.
*
* If `collection` is an array of primitives, `identifiers` may be unspecified.
* Otherwise, you should specify `identifiers` to sort by or `collection` will
* be returned unsorted. An identifier can expressed by:
*
* - an index position, if `collection` is a nested array,
* - a property name, if `collection` is an array of objects,
* - a function which returns a particular value from an element of a nested array or an array of objects. This function will be invoked by passing one element of `collection`.
*
* If `orders` is unspecified, all values are sorted in ascending order.
* Otherwise, specify an order of `'desc'` for descending or `'asc'` for
* ascending sort order of corresponding values. You may also specify a compare
* function for an order, which will be invoked by two arguments:
* `(valueA, valueB)`. It must return a number representing the sort order.
*
* @example
*
* import { orderBy } from 'natural-orderby';
*
* const users = [
* {
* username: 'Bamm-Bamm',
* ip: '192.168.5.2',
* datetime: 'Fri Jun 15 2018 16:48:00 GMT+0200 (CEST)'
* },
* {
* username: 'Wilma',
* ip: '192.168.10.1',
* datetime: '14 Jun 2018 00:00:00 PDT'
* },
* {
* username: 'dino',
* ip: '192.168.0.2',
* datetime: 'June 15, 2018 14:48:00'
* },
* {
* username: 'Barney',
* ip: '192.168.1.1',
* datetime: 'Thu, 14 Jun 2018 07:00:00 GMT'
* },
* {
* username: 'Pebbles',
* ip: '192.168.1.21',
* datetime: '15 June 2018 14:48 UTC'
* },
* {
* username: 'Hoppy',
* ip: '192.168.5.10',
* datetime: '2018-06-15T14:48:00.000Z'
* },
* ];
*
* orderBy(
* users,
* [v => v.datetime, v => v.ip],
* ['desc', 'asc']
* );
*
* // => [
* // {
* // username: 'dino',
* // ip: '192.168.0.2',
* // datetime: 'June 15, 2018 14:48:00',
* // },
* // {
* // username: 'Pebbles',
* // ip: '192.168.1.21',
* // datetime: '15 June 2018 14:48 UTC',
* // },
* // {
* // username: 'Bamm-Bamm',
* // ip: '192.168.5.2',
* // datetime: 'Fri Jun 15 2018 16:48:00 GMT+0200 (CEST)',
* // },
* // {
* // username: 'Hoppy',
* // ip: '192.168.5.10',
* // datetime: '2018-06-15T14:48:00.000Z',
* // },
* // {
* // username: 'Barney',
* // ip: '192.168.1.1',
* // datetime: 'Thu, 14 Jun 2018 07:00:00 GMT',
* // },
* // {
* // username: 'Wilma',
* // ip: '192.168.10.1',
* // datetime: '14 Jun 2018 00:00:00 PDT',
* // },
* // ]
*/
function orderBy(collection, identifiers, orders) {
if (!collection || !Array.isArray(collection)) {
return [];
}
var validatedIdentifiers = getIdentifiers(identifiers);
var validatedOrders = getOrders(orders);
return baseOrderBy(collection, validatedIdentifiers, validatedOrders);
}
var baseCompare = function baseCompare(options) {
return function (valueA, valueB) {
var a = getMappedValueRecord(valueA);
var b = getMappedValueRecord(valueB);
var result = compareValues(a, b);
return result * (options.order === 'desc' ? -1 : 1);
};
};
var isValidOrder = function isValidOrder(value) {
return typeof value === 'string' && (value === 'asc' || value === 'desc');
};
var getOptions = function getOptions(customOptions) {
var order = 'asc';
if (typeof customOptions === 'string' && isValidOrder(customOptions)) {
order = customOptions;
} else if (customOptions && typeof customOptions === 'object' && customOptions.order && isValidOrder(customOptions.order)) {
order = customOptions.order;
}
return {
order: order
};
};
/**
* Creates a compare function that defines the natural sort order considering
* the given `options` which may be passed to [`Array.prototype.sort()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort).
*
* If `options` or its property `order` is unspecified, values are sorted in
* ascending sort order. Otherwise, specify an order of `'desc'` for descending
* or `'asc'` for ascending sort order of values.
*
* @example
*
* import { compare } from 'natural-orderby';
*
* const users = [
* {
* username: 'Bamm-Bamm',
* lastLogin: {
* ip: '192.168.5.2',
* datetime: 'Fri Jun 15 2018 16:48:00 GMT+0200 (CEST)'
* },
* },
* {
* username: 'Wilma',
* lastLogin: {
* ip: '192.168.10.1',
* datetime: '14 Jun 2018 00:00:00 PDT'
* },
* },
* {
* username: 'dino',
* lastLogin: {
* ip: '192.168.0.2',
* datetime: 'June 15, 2018 14:48:00'
* },
* },
* {
* username: 'Barney',
* lastLogin: {
* ip: '192.168.1.1',
* datetime: 'Thu, 14 Jun 2018 07:00:00 GMT'
* },
* },
* {
* username: 'Pebbles',
* lastLogin: {
* ip: '192.168.1.21',
* datetime: '15 June 2018 14:48 UTC'
* },
* },
* {
* username: 'Hoppy',
* lastLogin: {
* ip: '192.168.5.10',
* datetime: '2018-06-15T14:48:00.000Z'
* },
* },
* ];
*
* users.sort((a, b) => compare()(a.ip, b.ip));
*
* // => [
* // {
* // username: 'dino',
* // ip: '192.168.0.2',
* // datetime: 'June 15, 2018 14:48:00'
* // },
* // {
* // username: 'Barney',
* // ip: '192.168.1.1',
* // datetime: 'Thu, 14 Jun 2018 07:00:00 GMT'
* // },
* // {
* // username: 'Pebbles',
* // ip: '192.168.1.21',
* // datetime: '15 June 2018 14:48 UTC'
* // },
* // {
* // username: 'Bamm-Bamm',
* // ip: '192.168.5.2',
* // datetime: 'Fri Jun 15 2018 16:48:00 GMT+0200 (CEST)'
* // },
* // {
* // username: 'Hoppy',
* // ip: '192.168.5.10',
* // datetime: '2018-06-15T14:48:00.000Z'
* // },
* // {
* // username: 'Wilma',
* // ip: '192.168.10.1',
* // datetime: '14 Jun 2018 00:00:00 PDT'
* // }
* // ]
*/
function compare(options) {
var validatedOptions = getOptions(options);
return baseCompare(validatedOptions);
}
/*
* Javascript natural sort algorithm with unicode support
* based on chunking idea by Dave Koelle
*
* https://github.com/yobacca/natural-sort-order
* released under MIT License
*/
/***/ }),
/***/ "./node_modules/papaparse/papaparse.min.js":
/*!*************************************************!*\
!*** ./node_modules/papaparse/papaparse.min.js ***!
\*************************************************/
/***/ (function(module, exports) {
var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/* @license
Papa Parse
v5.3.1
https://github.com/mholt/PapaParse
License: MIT
*/
!function(e,t){ true?!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (t),
__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)):0}(this,function s(){"use strict";var f="undefined"!=typeof self?self:"undefined"!=typeof window?window:void 0!==f?f:{};var n=!f.document&&!!f.postMessage,o=n&&/blob:/i.test((f.location||{}).protocol),a={},h=0,b={parse:function(e,t){var i=(t=t||{}).dynamicTyping||!1;M(i)&&(t.dynamicTypingFunction=i,i={});if(t.dynamicTyping=i,t.transform=!!M(t.transform)&&t.transform,t.worker&&b.WORKERS_SUPPORTED){var r=function(){if(!b.WORKERS_SUPPORTED)return!1;var e=(i=f.URL||f.webkitURL||null,r=s.toString(),b.BLOB_URL||(b.BLOB_URL=i.createObjectURL(new Blob(["(",r,")();"],{type:"text/javascript"})))),t=new f.Worker(e);var i,r;return t.onmessage=_,t.id=h++,a[t.id]=t}();return r.userStep=t.step,r.userChunk=t.chunk,r.userComplete=t.complete,r.userError=t.error,t.step=M(t.step),t.chunk=M(t.chunk),t.complete=M(t.complete),t.error=M(t.error),delete t.worker,void r.postMessage({input:e,config:t,workerId:r.id})}var n=null;b.NODE_STREAM_INPUT,"string"==typeof e?n=t.download?new l(t):new p(t):!0===e.readable&&M(e.read)&&M(e.on)?n=new g(t):(f.File&&e instanceof File||e instanceof Object)&&(n=new c(t));return n.stream(e)},unparse:function(e,t){var n=!1,_=!0,m=",",y="\r\n",s='"',a=s+s,i=!1,r=null,o=!1;!function(){if("object"!=typeof t)return;"string"!=typeof t.delimiter||b.BAD_DELIMITERS.filter(function(e){return-1!==t.delimiter.indexOf(e)}).length||(m=t.delimiter);("boolean"==typeof t.quotes||"function"==typeof t.quotes||Array.isArray(t.quotes))&&(n=t.quotes);"boolean"!=typeof t.skipEmptyLines&&"string"!=typeof t.skipEmptyLines||(i=t.skipEmptyLines);"string"==typeof t.newline&&(y=t.newline);"string"==typeof t.quoteChar&&(s=t.quoteChar);"boolean"==typeof t.header&&(_=t.header);if(Array.isArray(t.columns)){if(0===t.columns.length)throw new Error("Option columns is empty");r=t.columns}void 0!==t.escapeChar&&(a=t.escapeChar+s);"boolean"==typeof t.escapeFormulae&&(o=t.escapeFormulae)}();var h=new RegExp(j(s),"g");"string"==typeof e&&(e=JSON.parse(e));if(Array.isArray(e)){if(!e.length||Array.isArray(e[0]))return u(null,e,i);if("object"==typeof e[0])return u(r||Object.keys(e[0]),e,i)}else if("object"==typeof e)return"string"==typeof e.data&&(e.data=JSON.parse(e.data)),Array.isArray(e.data)&&(e.fields||(e.fields=e.meta&&e.meta.fields),e.fields||(e.fields=Array.isArray(e.data[0])?e.fields:"object"==typeof e.data[0]?Object.keys(e.data[0]):[]),Array.isArray(e.data[0])||"object"==typeof e.data[0]||(e.data=[e.data])),u(e.fields||[],e.data||[],i);throw new Error("Unable to serialize unrecognized input");function u(e,t,i){var r="";"string"==typeof e&&(e=JSON.parse(e)),"string"==typeof t&&(t=JSON.parse(t));var n=Array.isArray(e)&&0<e.length,s=!Array.isArray(t[0]);if(n&&_){for(var a=0;a<e.length;a++)0<a&&(r+=m),r+=v(e[a],a);0<t.length&&(r+=y)}for(var o=0;o<t.length;o++){var h=n?e.length:t[o].length,u=!1,f=n?0===Object.keys(t[o]).length:0===t[o].length;if(i&&!n&&(u="greedy"===i?""===t[o].join("").trim():1===t[o].length&&0===t[o][0].length),"greedy"===i&&n){for(var d=[],l=0;l<h;l++){var c=s?e[l]:l;d.push(t[o][c])}u=""===d.join("").trim()}if(!u){for(var p=0;p<h;p++){0<p&&!f&&(r+=m);var g=n&&s?e[p]:p;r+=v(t[o][g],p)}o<t.length-1&&(!i||0<h&&!f)&&(r+=y)}}return r}function v(e,t){if(null==e)return"";if(e.constructor===Date)return JSON.stringify(e).slice(1,25);!0===o&&"string"==typeof e&&null!==e.match(/^[=+\-@].*$/)&&(e="'"+e);var i=e.toString().replace(h,a),r="boolean"==typeof n&&n||"function"==typeof n&&n(e,t)||Array.isArray(n)&&n[t]||function(e,t){for(var i=0;i<t.length;i++)if(-1<e.indexOf(t[i]))return!0;return!1}(i,b.BAD_DELIMITERS)||-1<i.indexOf(m)||" "===i.charAt(0)||" "===i.charAt(i.length-1);return r?s+i+s:i}}};if(b.RECORD_SEP=String.fromCharCode(30),b.UNIT_SEP=String.fromCharCode(31),b.BYTE_ORDER_MARK="\ufeff",b.BAD_DELIMITERS=["\r","\n",'"',b.BYTE_ORDER_MARK],b.WORKERS_SUPPORTED=!n&&!!f.Worker,b.NODE_STREAM_INPUT=1,b.LocalChunkSize=10485760,b.RemoteChunkSize=5242880,b.DefaultDelimiter=",",b.Parser=E,b.ParserHandle=i,b.NetworkStreamer=l,b.FileStreamer=c,b.StringS
/***/ }),
/***/ "./src/freeDatas2HTML.ts":
/*!*******************************!*\
!*** ./src/freeDatas2HTML.ts ***!
\*******************************/
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "freeDatas2HTML": () => (/* binding */ freeDatas2HTML)
/* harmony export */ });
var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (undefined && undefined.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var Papa = __webpack_require__(/*! papaparse */ "./node_modules/papaparse/papaparse.min.js");
var errors = __webpack_require__(/*! ./errors.js */ "./src/errors.js");
var compare = __webpack_require__(/*! natural-orderby */ "./node_modules/natural-orderby/esm/natural-orderby.js").compare;
var freeDatas2HTML = (function () {
function freeDatas2HTML() {
this._datasViewElt = { id: "", eltDOM: undefined };
this._datasSourceUrl = "";
this._datasSelectors = [];
this._datasSortingColumns = [];
this.parseMeta = undefined;
this.parseDatas = [];
this.parseErrors = [];
this.datasHTML = "";
this.stopIfParseErrors = false;
}
Object.defineProperty(freeDatas2HTML.prototype, "datasViewElt", {
set: function (elt) {
var checkContainerExist = document.getElementById(elt.id);
if (checkContainerExist === null)
throw new Error(errors.elementNotFound + elt.id);
else {
this._datasViewElt.id = elt.id;
this._datasViewElt.eltDOM = checkContainerExist;
}
},
enumerable: false,
configurable: true
});
Object.defineProperty(freeDatas2HTML.prototype, "datasSourceUrl", {
set: function (url) {
if (url.trim().length === 0)
throw new Error(errors.needUrl);
else
this._datasSourceUrl = url.trim();
},
enumerable: false,
configurable: true
});
Object.defineProperty(freeDatas2HTML.prototype, "datasSelectors", {
get: function () {
return this._datasSelectors;
},
set: function (selectionElts) {
this._datasSelectors = [];
var checkContainerExist;
for (var i = 0; i < selectionElts.length; i++) {
checkContainerExist = document.getElementById(selectionElts[i].id);
if (checkContainerExist === null)
console.error(errors.elementNotFound + selectionElts[i].id);
else if (Number.isInteger(selectionElts[i].datasFieldNb) === false || selectionElts[i].datasFieldNb < 0)
console.error(errors.needNaturalNumber);
else {
selectionElts[i].eltDOM = checkContainerExist;
if (selectionElts[i].separator !== undefined && selectionElts[i].separator === "")
selectionElts[i].separator = undefined;
this._datasSelectors.push(selectionElts[i]);
}
}
},
enumerable: false,
configurable: true
});
Object.defineProperty(freeDatas2HTML.prototype, "datasSortingColumns", {
get: function () {
return this._datasSortingColumns;
},
set: function (sortingColumns) {
this._datasSortingColumns = [];
for (var i = 0; i < sortingColumns.length; i++) {
if (Number.isInteger(sortingColumns[i].datasFieldNb) === false || sortingColumns[i].datasFieldNb < 0)
console.error(errors.needNaturalNumber);
else {
sortingColumns[i].order = undefined;
this._datasSortingColumns.push(sortingColumns[i]);
}
}
},
enumerable: false,
configurable: true
});
freeDatas2HTML.prototype.parse = function () {
return __awaiter(this, void 0, void 0, function () {
var converter;
return __generator(this, function (_a) {
converter = this;
return [2, new Promise(function (resolve, reject) {
if (converter._datasSourceUrl !== "") {
Papa.parse(converter._datasSourceUrl, {
quoteChar: '"',
header: true,
complete: function (results) {
converter.parseErrors = results.errors;
converter.parseDatas = results.data;
var realFields = [];
for (var i in results.meta.fields) {
if (results.meta.fields[i].trim() !== "")
realFields.push(results.meta.fields[i]);
}
results.meta.fields = realFields;
converter.parseMeta = results.meta;
resolve(true);
},
error: function (error) {
reject(new Error(errors.parserFail));
},
download: true,
skipEmptyLines: true,
});
}
else
reject(new Error(errors.needUrl));
})];
});
});
};
freeDatas2HTML.prototype.run = function () {
return __awaiter(this, void 0, void 0, function () {
var converter_1, selectorsHTML, i, values, colName, row, checkedValue, checkedValues, i_1, checkedValue, j, selectElement, i;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (this._datasViewElt.eltDOM === undefined)
throw new Error(errors.needDatasElt);
if (this._datasSourceUrl === "")
throw new Error(errors.needUrl);
return [4, this.parse()];
case 1:
_a.sent();
if (this.parseDatas.length === 0 || this.parseMeta.fields === undefined)
throw new Error(errors.datasNotFound);
else if (this.stopIfParseErrors && this.parseErrors.length !== 0)
console.error(this.parseErrors);
else {
converter_1 = this;
if (this._datasSelectors.length > 0) {
selectorsHTML = [];
for (i in this._datasSelectors) {
if (this._datasSelectors[i].datasFieldNb > (this.parseMeta.fields.length - 1))
throw new Error(errors.selectorFieldNotFound);
else {
values = [], colName = this.parseMeta.fields[this._datasSelectors[i].datasFieldNb];
for (row in this.parseDatas) {
if (this._datasSelectors[i].separator === undefined) {
checkedValue = this.parseDatas[row][colName].trim();
if (checkedValue !== "" && values.indexOf(checkedValue) === -1)
values.push(checkedValue);
}
else {
checkedValues = this.parseDatas[row][colName].split(this._datasSelectors[i].separator);
for (i_1 in checkedValues) {
checkedValue = checkedValues[i_1].trim();
if (checkedValue !== "" && values.indexOf(checkedValue) === -1)
values.push(checkedValue);
}
}
}
if (values.length > 0) {
values.sort(compare());
this._datasSelectors[i].name = colName;
this._datasSelectors[i].values = values;
selectorsHTML[i] = "<label for='freeDatas2HTMLSelector" + i + "'>" + colName + " : </label><select name='freeDatas2HTMLSelector" + i + "' id='freeDatas2HTMLSelector" + i + "'><option value='0'>----</option>";
for (j in values)
selectorsHTML[i] += "<option value='" + (Number(j) + 1) + "'>" + values[j] + "</option>";
selectorsHTML[i] += "</select>";
this._datasSelectors[i].eltDOM.innerHTML = selectorsHTML[i];
selectElement = document.getElementById("freeDatas2HTMLSelector" + i);
selectElement.addEventListener('change', function (e) {
converter_1.datasHTML = converter_1.createDatasHTML(converter_1.parseMeta.fields, converter_1.parseDatas);
converter_1.refreshView();
});
}
}
}
}
for (i in this._datasSortingColumns) {
if (this._datasSortingColumns[i].datasFieldNb > (this.parseMeta.fields.length - 1))
throw new Error(errors.sortingColumnsFieldNotFound);
}
this.datasHTML = this.createDatasHTML(this.parseMeta.fields, this.parseDatas);
this.refreshView();
return [2, true];
}
return [2];
}
});
});
};
freeDatas2HTML.prototype.refreshView = function () {
if (this._datasViewElt.eltDOM !== undefined) {
var converter_2 = this;
this._datasViewElt.eltDOM.innerHTML = this.datasHTML;
if (this._datasSortingColumns.length > 0) {
var getTableTh = document.querySelectorAll("table th");
if (getTableTh !== null) {
var _loop_1 = function (i) {
var datasFieldNb = this_1._datasSortingColumns[i].datasFieldNb;
var htmlContent = getTableTh[datasFieldNb].innerHTML;
htmlContent = "<a href='#freeDatas2HTMLSorting" + datasFieldNb + "' id='freeDatas2HTMLSorting" + datasFieldNb + "'>" + htmlContent + "</a>";
getTableTh[datasFieldNb].innerHTML = htmlContent;
var sortingElement = document.getElementById("freeDatas2HTMLSorting" + datasFieldNb);
sortingElement.addEventListener('click', function (e) {
e.preventDefault();
var order = converter_2.datasSortingColumns[i].order;
if (order === undefined || order === "desc")
converter_2.datasSortingColumns[i].order = "asc";
else
converter_2.datasSortingColumns[i].order = "desc";
converter_2._datasSortedColumn = converter_2.datasSortingColumns[i];
converter_2.datasHTML = converter_2.createDatasHTML(converter_2.parseMeta.fields, converter_2.parseDatas);
converter_2.refreshView();
});
};
var this_1 = this;
for (var i in this._datasSortingColumns) {
_loop_1(i);
}
}
}
}
};
freeDatas2HTML.prototype.createDatasHTML = function (fields, datas) {
var checkSelectorExist, filters = [];
for (var i in this._datasSelectors) {
checkSelectorExist = document.querySelector("#" + this._datasSelectors[i].id + " select");
if (checkSelectorExist != null && checkSelectorExist.selectedIndex != 0)
filters.push({ field: this._datasSelectors[i].name, value: this._datasSelectors[i].values[checkSelectorExist.selectedIndex - 1], separator: this._datasSelectors[i].separator });
}
if (this._datasSortedColumn !== undefined) {
var col_1 = fields[this._datasSortedColumn.datasFieldNb];
var colOrder_1 = this._datasSortedColumn.order;
datas.sort(function (a, b) { return compare({ order: colOrder_1 })(a[col_1], b[col_1]); });
}
var datasHTML = "<table><thead>";
for (var i in fields)
datasHTML += "<th>" + fields[i] + "</th>";
datasHTML += "</thead><tbody>";
for (var row in datas) {
var visible = true;
if (filters.length !== 0) {
for (var i in filters) {
if (filters[i].separator === undefined) {
if (datas[row][filters[i].field].trim() != filters[i].value)
visible = false;
}
else {
var checkedValues = datas[row][filters[i].field].split(filters[i].separator), finded = false;
for (var j in checkedValues) {
if (checkedValues[j].trim() === filters[i].value) {
finded = true;
break;
}
}
if (!finded)
visible = false;
}
}
}
if (visible) {
datasHTML += "<tr>";
for (var field in datas[row]) {
if (fields.indexOf(field) !== -1)
datasHTML += "<td>" + datas[row][field] + "</td>";
}
datasHTML += "</tr>";
}
}
datasHTML += "</tbody></table>";
return datasHTML;
};
return freeDatas2HTML;
}());
/***/ }),
/***/ "./src/errors.js":
/*!***********************!*\
!*** ./src/errors.js ***!
\***********************/
/***/ ((module) => {
module.exports =
{
datasNotFound : "Aucune donnée n'a été trouvée.",
elementNotFound : "Aucun élément HTML n'a été trouvé ayant comme \"id\" : ",
needDatasElt: "Merci de fournir un id valide pour l'élément où afficher les données.",
needNaturalNumber: "Merci de fournir un nombre entier supérieur ou égal à zéro pour désigner chaque colonne.",
needUrl: "Merci de fournir une url valide pour le fichier CSV à parser.",
parserFail: "La lecture des données du fichier a échoué.",
selectorFieldNotFound: "Au moins une des colonnes devant servir à filtrer les données n'existe pas dans le fichier.",
sortingColumnsFieldNotFound: "Au moins une des colonnes devant servir à classer les données n'existe pas dans le fichier.",
};
/***/ })
/******/ });
/************************************************************************/
/******/ // The module cache
/******/ var __webpack_module_cache__ = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ var cachedModule = __webpack_module_cache__[moduleId];
/******/ if (cachedModule !== undefined) {
/******/ return cachedModule.exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = __webpack_module_cache__[moduleId] = {
/******/ // no module.id needed
/******/ // no module.loaded needed
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/************************************************************************/
/******/ /* webpack/runtime/define property getters */
/******/ (() => {
/******/ // define getter functions for harmony exports
/******/ __webpack_require__.d = (exports, definition) => {
/******/ for(var key in definition) {
/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
/******/ }
/******/ }
/******/ };
/******/ })();
/******/
/******/ /* webpack/runtime/hasOwnProperty shorthand */
/******/ (() => {
/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
/******/ })();
/******/
/******/ /* webpack/runtime/make namespace object */
/******/ (() => {
/******/ // define __esModule on exports
/******/ __webpack_require__.r = (exports) => {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/ })();
/******/
/************************************************************************/
var __webpack_exports__ = {};
// This entry need to be wrapped in an IIFE because it need to be in strict mode.
(() => {
"use strict";
/*!*****************************!*\
!*** ./src/firstExample.ts ***!
\*****************************/
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _freeDatas2HTML__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./freeDatas2HTML */ "./src/freeDatas2HTML.ts");
var __awaiter = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (undefined && undefined.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
var initialise = function () { return __awaiter(void 0, void 0, void 0, function () {
var converter, e_1;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 3]);
converter = new _freeDatas2HTML__WEBPACK_IMPORTED_MODULE_0__.freeDatas2HTML();
converter.datasViewElt = { id: "datas" };
converter.datasSelectors = [{ datasFieldNb: 3, id: "filtre1" }, { datasFieldNb: 4, id: "filtre2" }, { datasFieldNb: 5, id: "filtre3", separator: "," }];
converter.datasSortingColumns = [{ datasFieldNb: 0 }, { datasFieldNb: 1 }, { datasFieldNb: 2 }];
converter.datasSourceUrl = "http://localhost:8080/datas/elements-chimiques.csv";
return [4, converter.run()];
case 1:
_a.sent();
return [3, 3];
case 2:
e_1 = _a.sent();
console.error(e_1);
if (document.getElementById("datas") !== null)
document.getElementById("datas").innerHTML = "<strong>Désolé, mais un problème technique empêche l'affichage des données.</strong>";
return [3, 3];
case 3: return [2];
}
});
}); };
initialise();
})();
/******/ })()
;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9KUy9maXJzdEV4YW1wbGUuYXBwLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsdURBQXVEOztBQUV2RCw2QkFBNkI7O0FBRTdCLHlFQUF5RTs7QUFFekUseUVBQXlFLElBQUksT0FBTyxJQUFJLE9BQU8sSUFBSSxtQkFBbUIsRUFBRSxJQUFJOztBQUU1SCxnQ0FBZ0MsRUFBRTtBQUNsQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0IsVUFBVTtBQUM1QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QjtBQUN4Qix3QkFBd0I7QUFDeEI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxRQUFRO0FBQ1I7QUFDQTtBQUNBLFFBQVE7QUFDUjtBQUNBO0FBQ0EsUUFBUTtBQUNSO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBSTs7O0FBR0o7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsa0JBQWtCLFlBQVk7QUFDOUI7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxNQUFNO0FBQ047O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLE1BQU07QUFDTjtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRyxHQUFHOztBQUVOO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUcsR0FBRzs7QUFFTjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxZQUFZLFVBQVU7QUFDdEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsTUFBTTtBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVksVUFBVTtBQUN0QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUixNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUixNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUixNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUixNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUixNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFFBQVE7QUFDUixNQUFNO0FBQ047QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUFBWTtBQUNaO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsWUF